什么是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( ]]> </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 = </if> <if test="userPassword != null"> AND 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