Java+Spring+MySql情況中裝置和設置裝備擺設MyBatis的教程。本站提示廣大學習愛好者:(Java+Spring+MySql情況中裝置和設置裝備擺設MyBatis的教程)文章只能為提供參考,不一定能成為您想要的結果。以下是Java+Spring+MySql情況中裝置和設置裝備擺設MyBatis的教程正文
1.MyBatis簡介與設置裝備擺設MyBatis+Spring+MySql
1.1MyBatis簡介
MyBatis 是一個可以自界說SQL、存儲進程和高等映照的耐久層框架。MyBatis 摒除年夜部門的JDBC代碼、手工設置參數和成果集重獲。MyBatis 只應用簡略的XML 和注解來設置裝備擺設和映照根本數據類型、Map 接口和POJO 到數據庫記載。絕對Hibernate和Apache OJB等“一站式”ORM處理計劃而言,Mybatis 是一種“半主動化”的ORM完成。
須要應用的Jar包:mybatis-3.0.2.jar(mybatis焦點包)。mybatis-spring-1.0.0.jar(與Spring聯合包)。
下載地址:
http://ibatis.apache.org/tools/ibator
http://code.谷歌.com/p/mybatis/
1.2MyBatis+Spring+MySql簡略設置裝備擺設
1.2.1搭建Spring情況
(1)樹立maven的web項目;
(2)參加Spring框架、設置裝備擺設文件;
(3)在pom.xml中參加所須要的jar包(spring框架的、mybatis、mybatis-spring、junit等);
(4)更改web.xml和spring的設置裝備擺設文件;
(5)添加一個jsp頁面和對應的Controller;
(6)測試。
可參照:http://limingnihao.iteye.com/blog/830409。應用Eclipse的Maven構建SpringMVC項目
1.2.2樹立MySql數據庫
樹立一個先生選課治理數據庫。
表:先生表、班級表、教員表、課程表、先生選課表。
邏輯關系:每一個先生有一個班級;每一個班級對應一個班主任教員;每一個教員只能當一個班的班主任;
應用上面的sql停止建數據庫,先樹立先生表,拔出數據(2條以上)。
更多sql請下載項目源文件,在resource/sql中。
/* 樹立數據庫 */ CREATE DATABASE STUDENT_MANAGER; USE STUDENT_MANAGER; /***** 樹立student表 *****/ CREATE TABLE STUDENT_TBL ( STUDENT_ID VARCHAR(255) PRIMARY KEY, STUDENT_NAME VARCHAR(10) NOT NULL, STUDENT_SEX VARCHAR(10), STUDENT_BIRTHDAY DATE, CLASS_ID VARCHAR(255) ); /*拔出先生數據*/ INSERT INTO STUDENT_TBL (STUDENT_ID, STUDENT_NAME, STUDENT_SEX, STUDENT_BIRTHDAY, CLASS_ID) VALUES (123456, '某某某', '女', '1980-08-01', 121546 )
創立銜接MySql應用的設置裝備擺設文件mysql.properties。
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/student_manager?user=root&password=limingnihao&useUnicode=true&characterEncoding=UTF-8
1.2.3搭建MyBatis情況
次序隨意,如今的次序是由於可以盡可能的少的修正寫好的文件。
1.2.3.1創立實體類: StudentEntity
public class StudentEntity implements Serializable { private static final long serialVersionUID = 3096154202413606831L; private ClassEntity classEntity; private Date studentBirthday; private String studentID; private String studentName; private String studentSex; public ClassEntity getClassEntity() { return classEntity; } public Date getStudentBirthday() { return studentBirthday; } public String getStudentID() { return studentID; } public String getStudentName() { return studentName; } public String getStudentSex() { return studentSex; } public void setClassEntity(ClassEntity classEntity) { this.classEntity = classEntity; } public void setStudentBirthday(Date studentBirthday) { this.studentBirthday = studentBirthday; } public void setStudentID(String studentID) { this.studentID = studentID; } public void setStudentName(String studentName) { this.studentName = studentName; } public void setStudentSex(String studentSex) { this.studentSex = studentSex; } }
1.2.3.2創立數據拜訪接口
Student類對應的dao接口:StudentMapper。
public interface StudentMapper { public StudentEntity getStudent(String studentID); public StudentEntity getStudentAndClass(String studentID); public List<StudentEntity> getStudentAll(); public void insertStudent(StudentEntity entity); public void deleteStudent(StudentEntity entity); public void updateStudent(StudentEntity entity); }
1.2.3.3創立SQL映照語句文件
Student類的sql語句文件StudentMapper.xml
resultMap標簽:表字段與屬性的映照。
Select標簽:查詢sql。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.manager.data.StudentMapper"> <resultMap type="StudentEntity" id="studentResultMap"> <id property="studentID" column="STUDENT_ID"/> <result property="studentName" column="STUDENT_NAME"/> <result property="studentSex" column="STUDENT_SEX"/> <result property="studentBirthday" column="STUDENT_BIRTHDAY"/> </resultMap> <!-- 查詢先生,依據id --> <select id="getStudent" parameterType="String" resultType="StudentEntity" resultMap="studentResultMap"> <![CDATA[ SELECT * from STUDENT_TBL ST WHERE ST.STUDENT_ID = #{studentID} ]]> </select> <!-- 查詢先生列表 --> <select id="getStudentAll" resultType="com.manager.data.model.StudentEntity" resultMap="studentResultMap"> <![CDATA[ SELECT * from STUDENT_TBL ]]> </select> </mapper>
1.2.3.4創立MyBatis的mapper設置裝備擺設文件
在src/main/resource中創立MyBatis設置裝備擺設文件:mybatis-config.xml。
typeAliases標簽:給類起一個體名。com.manager.data.model.StudentEntity類,可使用StudentEntity取代。
Mappers標簽:加載MyBatis中實體類的SQL映照語句文件。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <typeAlias alias="StudentEntity" type="com.manager.data.model.StudentEntity"/> </typeAliases> <mappers> <mapper resource="com/manager/data/maps/StudentMapper.xml" /> </mappers> </configuration>
1.2.3.5修正Spring 的設置裝備擺設文件
重要是添加SqlSession的制造工場類的bean:SqlSessionFactoryBean,(在mybatis.spring包中)。須要指定設置裝備擺設文件地位和dataSource。
和數據拜訪接口對應的完成bean。經由過程MapperFactoryBean創立出來。須要履行接口類全稱和SqlSession工場bean的援用。
<!-- 導入屬性設置裝備擺設文件 --> <context:property-placeholder location="classpath:mysql.properties" /> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatis-config.xml" /> <property name="dataSource" ref="dataSource" /> </bean> <!— mapper bean --> <bean id="studentMapper" class="org.mybatis.spring.MapperFactoryBean"> <property name="mapperInterface" value="com.manager.data.StudentMapper" /> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean>
也能夠不界說mapper的bean,應用注解:
將StudentMapper參加注解
@Repository @Transactional public interface StudentMapper { }
對應的須要在dispatcher-servlet.xml中參加掃描:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="annotationClass" value="org.springframework.stereotype.Repository"/> <property name="basePackage" value="com.liming.manager"/> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean>
1.2.4測試StudentMapper
應用SpringMVC測試,創立一個TestController,設置裝備擺設tomcat,拜訪index.do頁面停止測試:
@Controller public class TestController { @Autowired private StudentMapper studentMapper; @RequestMapping(value = "index.do") public void indexPage() { StudentEntity entity = studentMapper.getStudent("10000013"); System.out.println("name:" + entity.getStudentName()); } }
應用Junit測試:
@RunWith(value = SpringJUnit4ClassRunner.class) @ContextConfiguration(value = "test-servlet.xml") public class StudentMapperTest { @Autowired private ClassMapper classMapper; @Autowired private StudentMapper studentMapper; @Transactional public void getStudentTest(){ StudentEntity entity = studentMapper.getStudent("10000013"); System.out.println("" + entity.getStudentID() + entity.getStudentName()); List<StudentEntity> studentList = studentMapper.getStudentAll(); for( StudentEntity entityTemp : studentList){ System.out.println(entityTemp.getStudentName()); } } }
2.MyBatis的主設置裝備擺設文件
在界說sqlSessionFactory時須要指定MyBatis主設置裝備擺設文件:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatis-config.xml" /> <property name="dataSource" ref="dataSource" /> </bean>
MyBatis設置裝備擺設文件中年夜標簽configuration下子標簽包含:
configuration |--- properties |--- settings |--- typeAliases |--- typeHandlers |--- objectFactory |--- plugins |--- environments |--- |--- environment |--- |--- |--- transactionManager |--- |--- |__ dataSource |__ mappers
2.1 properties屬性
properties和java的.properties的設置裝備擺設文件有關。設置裝備擺設properties的resource指定.properties的途徑,然後再在properties標簽下設置裝備擺設property的name和value,則可以調換.properties文件中響應屬性值。
<!-- 屬性調換 --> <properties resource="mysql.properties"> <property name="jdbc.driverClassName" value="com.mysql.jdbc.Driver"/> <property name="jdbc.url" value="jdbc:mysql://localhost:3306/student_manager"/> <property name="username" value="root"/> <property name="password" value="limingnihao"/> </properties>
2.2 settings設置
這是MyBatis 修正操作運轉進程細節的主要的步調。下方這個表格描寫了這些設置項、寄義和默許值。
_byte
byte
_long
long
_short
short
_int
int
_integer
int
_double
double
_float
float
_boolean
boolean
string
String
byte
Byte
long
Long
short
Short
int
Integer
integer
Integer
double
Double
float
Float
boolean
Boolean
date
Date
decimal
BigDecimal
bigdecimal
BigDecimal
object
Object
map
Map
hashmap
HashMap
list
List
arraylist
ArrayList
collection
Collection
iterator
Iterator
2.4 typeHandlers類型句柄
不管是MyBatis在預處置語句中設置一個參數,照樣從成果集中掏出一個值時,類型處置器被用來將獲得的值以適合的方法轉換成Java類型。上面這個表格描寫了默許的類型處置器。
BooleanTypeHandler
Boolean,boolean
任何兼容的布爾值
ByteTypeHandler
Byte,byte
任何兼容的數字或字節類型
ShortTypeHandler
Short,short
任何兼容的數字或短整型
IntegerTypeHandler
Integer,int
任何兼容的數字和整型
LongTypeHandler
Long,long
任何兼容的數字或長整型
FloatTypeHandler
Float,float
任何兼容的數字或單精度浮點型
DoubleTypeHandler
Double,double
任何兼容的數字或雙精度浮點型
BigDecimalTypeHandler
BigDecimal
任何兼容的數字或十進制小數類型
StringTypeHandler
String
CHAR和VARCHAR類型
ClobTypeHandler
String
CLOB和LONGVARCHAR類型
NStringTypeHandler
String
NVARCHAR和NCHAR類型
NClobTypeHandler
String
NCLOB類型
ByteArrayTypeHandler
byte[]
任何兼容的字撙節類型
BlobTypeHandler
byte[]
BLOB和LONGVARBINARY類型
DateTypeHandler
Date(java.util)
TIMESTAMP類型
DateOnlyTypeHandler
Date(java.util)
DATE類型
TimeOnlyTypeHandler
Date(java.util)
TIME類型
SqlTimestampTypeHandler
Timestamp(java.sql)
TIMESTAMP類型
SqlDateTypeHandler
Date(java.sql)
DATE類型
SqlTimeTypeHandler
Time(java.sql)
TIME類型
ObjectTypeHandler
Any
其他或未指定類型
EnumTypeHandler
Enumeration類型
VARCHAR-任何兼容的字符串類型,作為代碼存儲(而不是索引)。
public class LimingStringTypeHandler implements TypeHandler { @Override public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException { System.out.println("setParameter - parameter: " + ((String) parameter) + ", jdbcType: " + jdbcType.TYPE_CODE); ps.setString(i, ((String) parameter)); } @Override public Object getResult(ResultSet rs, String columnName) throws SQLException { System.out.println("getResult - columnName: " + columnName); return rs.getString(columnName); } @Override public Object getResult(CallableStatement cs, int columnIndex) throws SQLException { System.out.println("getResult - columnIndex: " + columnIndex); return cs.getString(columnIndex); } }
在設置裝備擺設文件的typeHandlers中添加typeHandler標簽。
<typeHandlers> <typeHandler javaType="String" jdbcType="VARCHAR" handler="liming.student.manager.type.LimingStringTypeHandler"/> </typeHandlers>
2.5 ObjectFactory對象工場
每次MyBatis 為成果對象創立一個新實例,都邑用到ObjectFactory。默許的ObjectFactory 與應用目的類的結構函數創立一個實例毫無差別,假如有曾經映照的參數,那也能夠應用帶參數的結構函數。
假如你重寫ObjectFactory 的默許操作,你可以經由過程繼續org.apache.ibatis.reflection.factory.DefaultObjectFactory創立一下你本身的。
ObjectFactory接口很簡略。它包括兩個創立用的辦法,一個是處置默許結構辦法的,別的一個是處置帶參數結構辦法的。終究,setProperties辦法可以被用來設置裝備擺設ObjectFactory。在初始化你的ObjectFactory實例後,objectFactory元素體中界說的屬性會被傳遞給setProperties辦法。
public class LimingObjectFactory extends DefaultObjectFactory { private static final long serialVersionUID = -399284318168302833L; @Override public Object create(Class type) { return super.create(type); } @Override public Object create(Class type, List<Class> constructorArgTypes, List<Object> constructorArgs) { System.out.println("create - type: " + type.toString()); return super.create(type, constructorArgTypes, constructorArgs); } @Override public void setProperties(Properties properties) { System.out.println("setProperties - properties: " + properties.toString() + ", someProperty: " + properties.getProperty("someProperty")); super.setProperties(properties); } }
設置裝備擺設文件中添加objectFactory標簽
<objectFactory type="liming.student.manager.configuration.LimingObjectFactory"> <property name="someProperty" value="100"/> </objectFactory>
2.6 plugins插件
MyBatis許可你在某一點攔阻已映照語句履行的挪用。默許情形下,MyBatis許可應用插件來攔阻辦法挪用:
這些類中辦法的概況可以經由過程檢查每一個辦法的簽名來發明,並且它們的源代碼在MyBatis的刊行包中有。你應當懂得你籠罩辦法的行動,假定你所做的要比監督挪用要多。假如你測驗考試修正或籠罩一個給定的辦法,你能夠會打破MyBatis的焦點。這是低條理的類和辦法,要謹嚴應用插件。
應用插件是它們供給的異常簡略的力氣。簡略完成攔阻器接口,要肯定你想攔阻的指定簽名。
2.7 environments情況
MyBatis 可以設置裝備擺設多個情況。這可以贊助你SQL 映照對應多種數據庫等。
2.8 mappers映照器
這裡是告知MyBatis 去哪尋覓映照SQL 的語句。可使用類途徑中的資本援用,或許應用字符,輸出確實的URL 援用。
例如:
<mappers> <mapper resource="com/manager/data/maps/UserMapper.xml" /> <mapper resource="com/manager/data/maps/StudentMapper.xml" /> <mapper resource="com/manager/data/maps/ClassMapper.xml" /> </mappers>