什么是 MyBatis?
MyBatis 是支持普通 SQL 查詢,存儲過程和高級映射的優秀持久層框架。 MyBatis 消除了幾乎所有的 JDBC 代碼和參數的手工設置以及對結果集的檢索。MyBatis 可以使用簡單的XML 或注解用于配置和原始映射,將接口和 Java 的 POJO(Plain Old Java Objects,普通的Java對象)映射成數據庫中的記錄。
MyBatis下載:https://github.com/mybatis/mybatis-3/releases
Mybatis實例
對一個User表的CRUD操作:
User表:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
-- ---------------------------- -- Table structure for `user` -- ---------------------------- DROP TABLE IF EXISTS ` user `; CREATE TABLE ` user ` ( `id` int (11) NOT NULL AUTO_INCREMENT, `userName` varchar (50) DEFAULT NULL , `userAge` int (11) DEFAULT NULL , `userAddress` varchar (200) DEFAULT NULL , PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO ` user ` VALUES ( '1' , 'summer' , '30' , 'shanghai' ); INSERT INTO ` user ` VALUES ( '2' , 'test2' , '22' , 'suzhou' ); INSERT INTO ` user ` VALUES ( '3' , 'test1' , '29' , 'some place' ); INSERT INTO ` user ` VALUES ( '4' , 'lu' , '28' , 'some place' ); INSERT INTO ` user ` VALUES ( '5' , 'xiaoxun' , '27' , 'nanjing' ); |
在Src目錄下建一個mybatis的xml配置文件Configuration.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
|
<? 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 > <!-- mybatis別名定義 --> < typeAliases > < typeAlias alias = "User" type = "com.mybatis.test.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" /> < property name = "username" value = "root" /> < property name = "password" value = "admin" /> </ dataSource > </ environment > </ environments > <!-- mybatis的mapper文件,每個xml配置文件對應一個接口 --> < mappers > < mapper resource = "com/mybatis/test/User.xml" /> </ mappers > </ configuration > |
定義User mappers的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
36
37
38
39
40
41
42
43
44
45
|
<? 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.mybatis.test.IUserOperation" > <!-- select語句 --> < select id = "selectUserByID" parameterType = "int" resultType = "User" > select * from `user` where user.id = #{id} </ select > <!-- 定義的resultMap,可以解決類的屬性名和數據庫列名不一致的問題--> <!-- <resultMap type="User" id="userResultMap"> <id property="id" column="user_id" /> <result property="userName" column="user_userName" /> <result property="userAge" column="user_userAge" /> <result property="userAddress" column="user_userAddress" /> </resultMap> --> <!-- 返回list的select語句,注意 resultMap的值是指向前面定義好的 --> <!-- <select id="selectUsersByName" parameterType="string" resultMap="userResultMap"> select * from user where user.userName = #{userName} </select> --> < select id = "selectUsersByName" parameterType = "string" resultType = "User" > select * from user where user.userName = #{userName} </ select > <!--執行增加操作的SQL語句。id和parameterType分別與IUserOperation接口中的addUser方法的名字和參數類型一致。 useGeneratedKeys設置為"true"表明要MyBatis獲取由數據庫自動生成的主鍵;keyProperty="id"指定把獲取到的主鍵值注入到User的id屬性--> < insert id = "addUser" parameterType = "User" useGeneratedKeys = "true" keyProperty = "id" > insert into user(userName,userAge,userAddress) values(#{userName},#{userAge},#{userAddress}) </ insert > < update id = "updateUser" parameterType = "User" > update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id} </ update > < delete id = "deleteUser" parameterType = "int" > delete from user where id=#{id} </ delete > </ mapper > |
配置文件實現了接口和SQL語句的映射關系。selectUsersByName采用了2種方式實現,注釋掉的也是一種實現,采用resultMap可以把屬性和數據庫列名映射關系定義好,property為類的屬性,column是表的列名,也可以是表列名的別名!
User類的定義:
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
|
package com.mybatis.test; public class User { private int id; private String userName; private int 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 int getUserAge() { return userAge; } public void setUserAge( int userAge) { this .userAge = userAge; } public String getUserAddress() { return userAddress; } public void setUserAddress(String userAddress) { this .userAddress = userAddress; } @Override public String toString(){ return this .userName+ " " + this .userAge+ " " + this .userAddress; } } |
IUserOperaton定義:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package com.mybatis.test; import java.util.List; public interface IUserOperation { public User selectUserByID( int id); public List<User> selectUsersByName(String userName); public void addUser(User user); public void updateUser(User user); public void deleteUser( int id); } |
IUserOperation為操作接口,函數名和mybatis的xml配置文件中的操作id名對應。
測試類Test:
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
package com.mybatis.test; import java.io.Reader; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class Test { private static SqlSessionFactory sqlSessionFactory; private static Reader reader; static { try { reader = Resources.getResourceAsReader( "Configuration.xml" ); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (Exception e) { e.printStackTrace(); } } public static SqlSessionFactory getSession() { return sqlSessionFactory; } public void getUserByID( int userID) { SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation = session .getMapper(IUserOperation. class ); User user = userOperation.selectUserByID(userID); if (user != null ) { System.out.println(user.getId() + ":" + user.getUserName() + ":" + user.getUserAddress()); } } finally { session.close(); } } public void getUserList(String userName) { SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation = session .getMapper(IUserOperation. class ); List<User> users = userOperation.selectUsersByName(userName); for (User user : users) { System.out.println(user.getId() + ":" + user.getUserName() + ":" + user.getUserAddress()); } } finally { session.close(); } } /** * 增加后要commit */ public void addUser() { User user = new User(); user.setUserAddress( "place" ); user.setUserName( "test_add" ); user.setUserAge( 30 ); SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation = session .getMapper(IUserOperation. class ); userOperation.addUser(user); session.commit(); System.out.println( "新增用戶ID:" + user.getId()); } finally { session.close(); } } /** * 修改后要commit */ public void updateUser() { SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation = session .getMapper(IUserOperation. class ); User user = userOperation.selectUserByID( 1 ); if (user != null ) { user.setUserAddress( "A new place" ); userOperation.updateUser(user); session.commit(); } } finally { session.close(); } } /** * 刪除后要commit. * * @param id */ public void deleteUser( int id) { SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation = session .getMapper(IUserOperation. class ); userOperation.deleteUser(id); session.commit(); } finally { session.close(); } } public static void main(String[] args) { try { Test test = new Test(); // test.getUserByID(1); // test.getUserList("test1"); // test.addUser(); // test.updateUser(); // test.deleteUser(6); } catch (Exception e) { System.out.println(e.getMessage()); } } } |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://www.tuicool.com/articles/r6zAfi3