搭建简单的MyBaties框架

什么是MyBatis?MyBatis是一个运用于持久层的数据操作框架。MyBatis是从iBatis升级而来。使用MyBatis提供的ORM机制,业务逻辑层实现人员操作的是JAVA对象,该层面与Hibernate机制中的相同。对于具体的数据库操作而言,Hibernate会自动生成SQL并执行,而MyBatis要求开发人员具体编写SQL语句。MyBatis在数据库移植性和SQL开发工作量上进行了让步,从而提升了系统设计的灵活性,扩展了其自由空间。

为什么需要MyBatis?系统的部分或全部数据来自现有数据库,出于安全性的考虑,只为开发团队提供几条Select SQL(或存储过程)以获取所需数据,具体的表结构不予公开。开发规范中要求,所有牵涉到业务逻辑部分的数据库操作,必须在数据库层由存储过程实现(对于金融行业而言,工商银行、中国银行和交通银行,都在开发规范中严格指定)。系统数据处理量巨大,性能要求极为苛刻,这通常意味着我们必须由经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。

###工具准备

1:MyEclipse 10 + Jdk6.0 及以上

2:mybatis-3.1.1.jar + mysql-connector-5.0.3.jar

3: Junit

###准备数据

创建User表

列名 类型 说明 约束
userId int 用户ID 主键标识列
userName varchar 用户姓名 不能为空
userPassword varchar 用户密码 不能为空
userBirth datetime 用户生日
userAddress varchar 用户ID
userPhone varchar 用户电话
userStatus int 用户类型 0为禁用;1为普通用户(默认);2为管理员

###配置

整体结构

1、使用Eclipse创建web项目MyBatisDemo1

2、添加所需的jar

下载前面提供的jar并导入到项目当中

3、创建mybatis-config.xml(src)文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置Mybatis的环境,事务及数据源等等 -->
<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:3307/syprodb" />
<!-- 数据库用户名 -->
<property name="username" value="root" />
<!-- 数据库密码 -->
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
</configuration>

4、创建实体类User.java(com.xhay1122.entity.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
package com.xhay1122.entity.user;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private int userId;
private String userName;
private String userPassword;
private Date userBirth;
private String userAddress;
private String userPhone;
private int userStatus;
//无参数的构造函数
//getter和setter
@Override
public String toString() {
return "User [userId=" + userId + ", userName=" + userName
+ ", userPassword=" + userPassword + ", userBirth=" + userBirth
+ ", userAddress=" + userAddress + ", userPhone=" + userPhone
+ ", userStatus=" + userStatus + "]";
}
}

5、创建映射器的配置文件UserMapper.xml(com.xhay1122.mapper.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
<?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.xhay1122.dao.user.UserDao">
<!-- 添加用户 -->
<insert id="insertUser" parameterType="com.xhay1122.entity.user.User">
<![CDATA[
insert into User ( userId, userName, userPassword, userBirth, userAddress, userStatus, userPhone)
values(#{userId}, #{userName}, #{userPassword}, #{userBirth}, #{userAddress}, #{userStatus}, #{userPhone})
]]>
</insert>
<!-- 根据用户名和密码查询用户 -->
<select id="selectUserByNameAndPassword" parameterType="com.xhay1122.entity.user.User"
resultType="com.xhay1122.entity.user.User">
<![CDATA[
select * from User
]]>
<where>
<if test="userName != null">
userName = #{userName}
</if>
<if test="userPassword != null">
AND userPassword = #{userPassword}
</if>
</where>
</select>
<select id="selectAllUsers" resultType="com.xhay1122.entity.user.User">
<![CDATA[
select * from User
]]>
</select>
</mapper>

补充:
namespace表示该配置文件对于映射器(UserDao)接口的完全路径。

insert 映射插入语句

Id表示在命名空间中唯一的标识符,可以被用于引用该语句,与映射器接口中的方法一致时,会在该方法中使用该语句。

parameterType表示将会传入该语句的参数类的完全限定名或别名。

useGeneratedKeys表示使用JDBC的getGeneratedKeys方法取出由数据库内部生成的主键(实现标识列自动增长)。

select 映射查询语句

Id表示在命名空间中唯一的标识符,可以被用于引用该语句,与映射器接口中的方法一致时会在该方法中使用该语句。

parameterType表示将会传入该语句的参数类的完全限定名或别名。

resultType表示从这条语句中返回的期望类型的类的完全限定名或别名,如果返回的是集合,则应是集合中包含元素的类型,而并非集合本身。

6、创建映射器UserDao.java(com.xhay1122.dao.user)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.xhay1122.dao.user;
import java.util.List;
import com.xhay1122.entity.user.User;
public interface UserDao {
//新增用户
public int insertUser(User user);
//根据用户名和密码查询用户
public User selectUserByNameAndPassword(User user);
//查询所有的用户
public List<User> selectAllUsers();
}

7、在mybatis-config.xml中添加映射文件指向UserMapper.xml

1
2
3
<mappers>
<mapper resource="com/xhay1122/mapper/user/UserMapper.xml" />
</mappers>

8、测试TestUser.java(com.xhay1122.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
package com.xhay1122.test;
import java.io.Reader;
import java.util.Date;
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;
import org.junit.Before;
import org.junit.Test;
import com.xhay1122.dao.user.UserDao;
import com.xhay1122.entity.user.User;
public class TestUser {
private SqlSession session=null;
@Before
public void setUp() throws Exception {
String resource = "mybatis-configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
session = sqlMapper.openSession();
}
@Test
public void testInsertUser(){
System.out.println("==========testInsertUser==========");
UserDao o = session.getMapper(UserDao.class);
User user = new User();
user.setUserId(1);
user.setUserName("xhay");
user.setUserPassword("20120608a");
user.setUserBirth(new Date());
System.out.println(o.insertUser(user));
session.commit(); //提交
session.close();
System.out.println("====================");
}
@Test
public void testUserLogin(){
System.out.println("==========testUserLogin==========");
UserDao o = session.getMapper(UserDao.class);
User user = new User();
user.setUserName("xhay");
user.setUserPassword("20120608a");
System.out.println(o.selectUserByNameAndPassword(user));
System.out.println("====================");
}
@Test
public void testgetAllUser(){
System.out.println("==========testgetAllUser==========");
UserDao o = session.getMapper(UserDao.class);
List<User> users = o.selectAllUsers();
for (int i = 0; i < users.size(); i++) {
System.out.println(users.get(i));
}
System.out.println("====================");
}
}

下载完整源代码

推荐资料

1、 Java Persistence with MyBatis 3(中文版)

2、 JUnit教程

3、 mybatis