新建項目(我使用的是maven項目)mybatis-study-01
一、加入mybatis與mysql-connector依賴包到pom文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
< project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion >4.0.0</ modelVersion > < groupId >mybatis</ groupId > < artifactId >mybatis-study-01</ artifactId > < version >0.0.1-SNAPSHOT</ version > < packaging >jar</ packaging > < name >mybatis-01</ name > < url >http://maven.apache.org</ url > < properties > < project.build.sourceEncoding >UTF-8</ project.build.sourceEncoding > </ properties > < dependencies > < dependency > < groupId >junit</ groupId > < artifactId >junit</ artifactId > < version >4.10</ version > < scope >test</ scope > </ dependency > < dependency > < groupId >org.mybatis</ groupId > < artifactId >mybatis</ artifactId > < version >3.2.3</ version > </ dependency > < dependency > < groupId >mysql</ groupId > < artifactId >mysql-connector-java</ artifactId > < version >5.1.27</ version > </ dependency > </ dependencies > </ project > |
二、創建數據庫mybatis-test
新建一張user表用于測試。建表sql如下:
1
2
3
4
5
6
7
8
9
|
CREATE TABLE ` user ` ( `id` int (11) NOT NULL auto_increment, ` password ` varchar (255) default NULL , `user_name` varchar (50) default NULL , `user_age` int (11) default NULL , `user_address` varchar (200) default NULL , PRIMARY KEY (`id`), UNIQUE KEY `userName` (`user_name`) ) EN |
插入一條數據
1
|
INSERT INTO ` user ` VALUES ( '1' , '123131' , 'summer' , '100' , 'shanghai,pudong' ); |
三、在項目中編寫pojo對象。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
package com.zf.mybatis.pojo; public class User { private int id; private String password ; private String userName; private String userAge; private String userAddress; public int getId() { return id; } public void setId( int id) { this .id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this .userName = userName; } public String getUserAge() { return userAge; } public void setUserAge(String userAge) { this .userAge = userAge; } public String getUserAddress() { return userAddress; } public void setUserAddress(String userAddress) { this .userAddress = userAddress; } public String getPassword() { return password; } public void setPassword(String password) { this .password = password; } } |
四、編寫pojo對應的映射文件User.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
<? 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.zf.mybatis.pojo.UserMapper" > <!-- 使用sql標簽可以將公共的sql提取出來復用 --> < sql id = "queryFields" > id , password , user_name as userName , user_age as userAge , user_address as userAddress </ sql > < select id = "selectByID" parameterType = "int" resultType = "User" > select < include refid = "queryFields" /> from `user` where id = #{id} </ select > < insert id = "add" parameterType = "User" useGeneratedKeys = "true" keyProperty = "id" > insert into `user` (password , user_name , user_age , user_address) values(#{password} , #{userName} , #{userAge} , #{userAddress} ) </ insert > < update id = "update" parameterType = "User" > update `user` set password = #{password} , user_name = #{userName}, user_age = #{userAge}, user_address = #{userAddress} where id = #{id} </ update > < delete id = "deleteById" parameterType = "int" > delete from `user` where id = #{id} </ delete > </ mapper > |
注意:上面的namespace的值為com.zf.mybatis.pojo.UserMapper,可以自定義 ,UserMapper不是一個類,不需要存在的。
另外,mybatis會將從數據庫查詢出來的記錄根據列名與pojo中的字段進行匹配, 所以上面的user_name,user_age ,user_address這幾個字段都取了別名,跟pojo中的字段相對應。 如果不起別名, 查詢出來的對象,這幾個字段是沒有值的。
五、編寫mybatis的配置文件mybatis-config.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<? 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 = "User" type = "com.zf.mybatis.pojo.User" /> </ typeAliases > <!-- 數據庫配置信息 --> < environments default = "development" > < environment id = "development" > < transactionManager type = "JDBC" /> < dataSource type = "POOLED" > < property name = "driver" value = "com.mysql.jdbc.Driver" /> < property name = "url" value = "jdbc:mysql://127.0.0.1:3306/mybatis-test" /> < property name = "username" value = "root" /> < property name = "password" value = "root" /> </ dataSource > </ environment > </ environments > <!-- 映射文件 --> < mappers > < mapper resource = "conf/User.xml" /> </ mappers > </ configuration > |
在該配置文件中配置了數據庫的鏈接方式,以及注冊所有的映射文件,還可以設置mybatis的一些參數。
現在就可以編寫測試類了。來測試一下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
package com.zf.mybatis; import java.io.IOException; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Before; import org.junit.Test; import com.zf.mybatis.pojo.User; public class TestMyBatis { private SqlSessionFactory sqlSessionFactory; private Reader reader; @Before public void init(){ try { reader = Resources.getResourceAsReader( "mybatis-config.xml" ); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); } } @Test public void testQueryUser(){ SqlSession session = sqlSessionFactory.openSession(); try { User user = (User) session.selectOne( "com.zf.mybatis.pojo.UserMapper.selectByID" , 1 ); System.out.println(user.getUserAddress()); System.out.println(user.getUserName()); } finally { session.close(); } } @Test public void testInsertUser(){ SqlSession session = sqlSessionFactory.openSession(); try { User user = new User() ; user.setUserName( "abcde" ); user.setUserAge( 15 ) ; user.setUserAddress( "hangzhou/zhejiang" ); user.setPassword( "123456" ); //返回值是記錄條數 int resultCount = session.insert( "com.zf.mybatis.pojo.UserMapper.add" , user ); session.commit() ; System.out.printf( "userID:%d,總記錄條數:%d" , user.getId() , resultCount); //獲取插入對象的id } finally { session.close(); } } @Test public void testUpdateUser(){ SqlSession session = sqlSessionFactory.openSession(); try { User user = new User() ; user.setId( 5 ) ; user.setUserName( "updateName" ); user.setUserAge( 101 ) ; user.setUserAddress( "shenzhen/guangdong" ); user.setPassword( "000000" ); //返回值是修改條數 int updateCount = session.update( "com.zf.mybatis.pojo.UserMapper.update" , user ); session.commit() ; System.out.printf( "修改條數:%d" ,updateCount); } finally { session.close(); } } @Test public void testDelete(){ SqlSession session = sqlSessionFactory.openSession(); try { //返回值是刪除條數 int deleteCount = session.update( "com.zf.mybatis.pojo.UserMapper.deleteById" , 4 ); session.commit() ; System.out.printf( "刪除條數:%d" ,deleteCount ); } finally { session.close(); } } } |
運行testQueryUser結果如下:
1
2
|
shanghai,pudong summer |
到此,一個mybatis的helloworld類型的小程序就出來了。
PS:MyBaits配置文件報錯解決
Mybaits的配置文件校驗很詭異,節點的位置還有要求
如下,會報錯:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?,mappers?)". <?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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@xx:1521:xx"/> <property name="username" value="ireport"/> <property name="password" value="xxxx"/> </dataSource> </environment> </environments> <typeAliases> <typeAlias type="com.ice.stat.online.model.EventFlag" alias="EventFlag"/> </typeAliases> <mappers> <mapper resource="com/ice/stat/online/model/hbm/EventFlagMapper.xml"/> </mappers> </configuration> |
把typeAliases放到最上面就好了說:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<? 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 type = "com.ice.stat.online.model.EventFlag" alias = "EventFlag" /> </ typeAliases > < environments default = "development" > < environment id = "development" > < transactionManager type = "JDBC" /> < dataSource type = "POOLED" > < property name = "driver" value = "oracle.jdbc.driver.OracleDriver" /> < property name = "url" value = "jdbc:oracle:thin:@xx:1521:xx" /> < property name = "username" value = "ireport" /> < property name = "password" value = "xxxx" /> </ dataSource > </ environment > </ environments > < mappers > < mapper resource = "com/ice/stat/online/model/hbm/EventFlagMapper.xml" /> </ mappers > </ configuration > |