本文将介绍使用框架mybatis开发原始Dao层来对一个对数据库进行增删改查的案例。
本次使用的mybatis版本为mybatis-3.2.7,开发工具为eclipse,数据库为mysql,jdk版本jdk1.8.0_151。
1、首先,使用eclipse新建一个java工程,在lib目录下加入mybatis核心包、依赖包、数据驱动包,然后BuildPath一下。。
2、添加日志文件,在classpath下创建log4j.properties如下:
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
3、在classpath下创建config资源文件夹,并在config文件夹下创建SqlMapConfig.xml,如下:
/p>
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
SqlMapConfig.xml是mybatis核心配置文件,上边文件的配置内容为数据源、事务管理。
4、创建数据封装使用的User类
packagecom.xyfer.po;importjava.util.Date;/***
*@authorxyfer
* 数据封装使用的User类
**/
public classUser {private int id; //id
private String username; //姓名
private String sex; //性别
private Date birthday; //生日
private String address; //地址
public intgetId() {returnid;
}public void setId(intid) {this.id =id;
}publicString getUsername() {returnusername;
}public voidsetUsername(String username) {this.username =username;
}publicString getSex() {returnsex;
}public voidsetSex(String sex) {this.sex =sex;
}publicDate getBirthday() {returnbirthday;
}public voidsetBirthday(Date birthday) {this.birthday =birthday;
}publicString getAddress() {returnaddress;
}public voidsetAddress(String address) {this.address =address;
}
}
5、在classpath下的资源文件夹sqlmapper目录下创建sql映射文件User.xml:
/p>
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
select * from user where id = #{id}
select LAST_INSERT_ID()insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
where id=#{id}
delete from user where id=#{id}
6、mybatis框架需要加载映射文件,将Users.xml添加在SqlMapConfig.xml,如下:
7、dao层接口
packagecom.xyfer.dao;importcom.xyfer.po.User;public interfaceUserDao {public User getUserById(int id); //根据id值查询一个用户
public void insertUser(User user); //新增一个用户
public void updateUser(User user); //修改一个用户
public void deleteUser(int id); //删除一个用户
}
dao层接口实现类
packagecom.xyfer.dao.impl;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importcom.xyfer.dao.UserDao;importcom.xyfer.po.User;public class UserDaoImpl implementsUserDao {//注入SqlSessionFactory
publicUserDaoImpl(SqlSessionFactory sqlSessionFactory){this.setSqlSessionFactory(sqlSessionFactory);
}privateSqlSessionFactory sqlSessionFactory;publicSqlSessionFactory getSqlSessionFactory() {returnsqlSessionFactory;
}public voidsetSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {this.sqlSessionFactory =sqlSessionFactory;
}
@Overridepublic User getUserById(intid) {
SqlSession session=sqlSessionFactory.openSession();
User user= null;try{//通过sqlsession调用selectOne方法获取一条结果集//参数1:指定定义的statement的id,参数2:指定向statement中传递的参数
user = session.selectOne("test.findUserById", 1);
System.out.println(user);
}finally{
session.close();
}returnuser;
}
@Overridepublic voidinsertUser(User user) {
SqlSession sqlSession=sqlSessionFactory.openSession();try{
sqlSession.insert("test.insertUser", user);
sqlSession.commit();
}finally{
sqlSession.close();
}
}
@Overridepublic voidupdateUser(User user) {
SqlSession sqlSession=sqlSessionFactory.openSession();try{
sqlSession.update("test.updateUser", user);
sqlSession.commit();
}finally{
sqlSession.close();
}
}
@Overridepublic void deleteUser(intid) {
SqlSession sqlSession=sqlSessionFactory.openSession();try{
sqlSession.delete("test.deleteUserById", id);
sqlSession.commit();
}finally{
sqlSession.close();
}
}
}
8、创建一个JUnit的测试类,对UserDao进行测试。
packagecom.xyfer.dao.impl;import static org.junit.Assert.*;importjava.io.InputStream;importjava.util.Date;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.junit.Before;importorg.junit.Test;importcom.xyfer.dao.UserDao;importcom.xyfer.po.User;public classUserDaoImplTest {privateSqlSessionFactory sqlSessionFactory;
@Beforepublic void init() throwsException {
SqlSessionFactoryBuilder sessionFactoryBuilder= newSqlSessionFactoryBuilder();
InputStream inputStream= Resources.getResourceAsStream("SqlMapConfig.xml");
sqlSessionFactory=sessionFactoryBuilder.build(inputStream);
}
@Testpublic voidtestGetUserById() {
UserDao userDao= newUserDaoImpl(sqlSessionFactory);
User user= userDao.getUserById(22);
System.out.println(user);
}
@Testpublic voidtestInsertUser() {
User user= newUser();
user.setUsername("小李");
user.setSex("男");
user.setBirthday(newDate());
user.setAddress("杭州市");
UserDao userDao= newUserDaoImpl(sqlSessionFactory);
userDao.insertUser(user);
}
@Testpublic voidtestUpdateUser() {
User user= newUser();
user.setId(10);
user.setUsername("小威");
user.setSex("男");
user.setBirthday(newDate());
user.setAddress("杭州市");
UserDao userDao= newUserDaoImpl(sqlSessionFactory);
userDao.updateUser(user);
}
@Testpublic voidtestDeleteUser() {
UserDao userDao= newUserDaoImpl(sqlSessionFactory);
userDao.deleteUser(10);
}
}
以上步骤,完成使用mybatis框架开发原始dao层,并对数据库进行增删改查操作。
需要注意的是,上文提到的config文件夹和sqlmapper文件夹均为资源文件夹(source folder),默认会加载该路径下的文件。