【MyBatis】mybatis传统DAO层使用
其实大概思路是差不多的,所以我直接搬代码了。
持久层接口
package com.siyi.dao;
import com.siyi.domain.User;
import java.util.List;
/**
* 用户持久层接口
*/
public interface IUSerDao {
/**
* 查询所有用户
* @return
*/
public List<User> findAll();
/**
* 保存用户
* @param user
*/
public void saveUser(User user);
/**
* 更新用户
* @param user
*/
public void updateUser(User user);
/**
* 根据Id删除用户
* @param userId
*/
public void deleteUser(Integer userId);
/**
* 根据id查询用户信息
* @param userId
* @return
*/
public User findById(Integer userId);
/**
* 根据名称模糊查询用户信息
* @return
*/
public List<User> findByName(String name);
/**
* 查询总用户数
* @return
*/
public int findTotal();
}
持久层接口的映射文件
<?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.siyi.dao.IUSerDao">
<!-- 查询所有 -->
<select id="findAll" resultType="user">
select * from user;
</select>
<!-- 保存用户 -->
<insert id="saveUser" parameterType="com.siyi.domain.User">
<!-- 配置插入操作后,获取插入数据的id -->
<selectKey keyProperty="id" keyColumn="id" resultType="Integer" order="AFTER">
select last_insert_id();
</selectKey>
insert into user(username,address,sex,birthday) value(#{username},#{address},#{sex},#{birthday});
</insert>
<!-- 更新用户 -->
<update id="updateUser" parameterType="com.siyi.domain.User">
update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id};
</update>
<!-- 删除用户 -->
<delete id="deleteUser" parameterType="Integer">
delete from user where id = #{id}
</delete>
<!-- 根据id查询用户 -->
<select id="findById" parameterType="Integer" resultType="com.siyi.domain.User">
select * from user where id=#{id}
</select>
<!-- 根据名称模糊查询的语法 -->
<select id="findByName" parameterType="String" resultType="com.siyi.domain.User">
<!--select * from user where username like #{name} 第一种写法参数必须自己手动加%-->
select * from user where username like '%${value}%' <!--第二种写法参数固定为value-->
</select>
<!-- 获取用户的总记录条数 -->
<select id="findTotal" resultType="Integer">
select count(*) from user;
</select>
</mapper>
持久层接口的实现类
package com.siyi.dao.impl;
import com.siyi.dao.IUSerDao;
import com.siyi.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
public class UserDaoImpl implements IUSerDao {
private SqlSessionFactory factory;
public UserDaoImpl(SqlSessionFactory factory){
this.factory = factory;
}
public List<User> findAll() {
//根据factory获取SqlSession对象
SqlSession session = factory.openSession();
//2. 调用SqlSession中的方法,实现查询列表
List<User> users = session.selectList("com.siyi.dao.IUSerDao.findAll");
//3.释放资源
session.close();
return users;
}
public void saveUser(User user) {
SqlSession session = factory.openSession();
int x = session.insert("com.siyi.dao.IUSerDao.saveUser",user);
session.commit();
System.out.println(user);
session.close();
}
public void updateUser(User user) {
SqlSession session = factory.openSession();
int x = session.update("com.siyi.dao.IUSerDao.updateUser",user);
session.commit();
System.out.println(user);
session.close();
}
public void deleteUser(Integer userId) {
SqlSession session = factory.openSession();
int x = session.update("com.siyi.dao.IUSerDao.deleteUser",userId);
session.commit();
System.out.println(x);
session.close();
}
public User findById(Integer userId) {
SqlSession session = factory.openSession();
User user = session.selectOne("com.siyi.dao.IUSerDao.findById",userId);
session.commit();
session.close();
return user;
}
public List<User> findByName(String name) {
SqlSession session = factory.openSession();
List<User> users = session.selectList("com.siyi.dao.IUSerDao.findByName",name);
session.commit();
session.close();
return users;
}
public int findTotal() {
SqlSession session = factory.openSession();
Integer total = session.selectOne("com.siyi.dao.IUSerDao.findTotal");
session.commit();
session.close();
return total;
}
}
测试类
package com.siyi.test;
import com.siyi.dao.IUSerDao;
import com.siyi.dao.impl.UserDaoImpl;
import com.siyi.domain.User;
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.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
public class MbatisTest {
private InputStream in;
private IUSerDao iuSerDao;
@Before//用于在测试方法执行之前执行
public void init() throws IOException {
//1.读取配置文件生成字节输入流
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.获取SqlSessionFactory对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂对象创建dao对象
iuSerDao = new UserDaoImpl(factory);
}
@After//用于在测试方法之后执行
public void destroy() throws IOException {
in.close();
}
@Test
public void testFindAll() throws IOException {
//5.执行查询所有方法
List<User> users = iuSerDao.findAll();
for (User user : users) {
System.out.println(user);
}
}
/**
* 测试保存操作
*/
@Test
public void testSave() throws IOException {
User user = new User();
user.setUsername("私忆一秒钟");
user.setAddress("中国四川");
user.setSex("男");
user.setBirthday(new Date());
iuSerDao.saveUser(user);
}
@Test
public void testUpadate(){
User user = new User();
user.setId(42);
user.setUsername("siyiyimiaozhong");
user.setAddress("sichuan");
user.setSex("男");
user.setBirthday(new Date());
iuSerDao.updateUser(user);
}
@Test
public void testDelete(){
iuSerDao.deleteUser(55);
}
@Test
public void testFind(){
User user = iuSerDao.findById(55);
System.out.println(user);
}
@Test
public void testFindByName(){
//List<User> users = iuSerDao.findByName("%yi%");
List<User> users = iuSerDao.findByName("yi");
for (User user : users){
System.out.println(user);
}
}
@Test
public void testFindTotal() {
System.out.println(iuSerDao.findTotal());
}
}