Mybatis 传统 DAO 层开发[了解]
目录
Mybatis 实现 DAO 的传统开发方式
持久层 Dao 接口
package com.sunyan.dao; import com.sunyan.domain.User; import java.util.List; /** * 持久层接口 */ public interface UserDao { /** * 查询所有用户 * @return */ List<User> findAll(); /** * 保存用户 * @param user */ void saveUser(User user); /** * 更新用户 * @param user */ void updateUser(User user); /** * 根据id删除用户 * @param userId */ void deleteUser(Integer userId); /** * 根据id查询用户信息 * @param userId * @return */ User findById(Integer userId); /** * 根据名称模糊查询用户信息 * @param username * @return */ List<User> findByName(String username); /** * 查询总用户数 * @return */ int findTotal(); }
持久层 Dao 实现类
package com.sunyan.dao.impl; import com.sunyan.dao.UserDao; import com.sunyan.domain.User; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import java.util.List; public class UserDaoImpl implements UserDao { private SqlSessionFactory factory; public UserDaoImpl(SqlSessionFactory factory) { this.factory = factory; } public List<User> findAll() { //1.根据factory获取SqlSession对象 SqlSession session = factory.openSession(); //2.调用SqlSession中的方法实现查询列表 List<User> users = session.selectList("com.sunyan.dao.UserDao.findAll");//参数就是配置信息的key //3.释放资源 session.close(); return users; } public void saveUser(User user) { //1.根据factory获取SqlSession对象 SqlSession session = factory.openSession(); //2.调用方法,实现保存 session.insert("com.sunyan.dao.UserDao.saveUser", user); //3.提交事务 session.commit(); //4.释放资源 session.close(); } public void updateUser(User user) { //1.根据factory获取SqlSession对象 SqlSession session = factory.openSession(); //2.调用方法,实现保存 session.update("com.sunyan.dao.UserDao.updateUser", user); //3.提交事务 session.commit(); //4.释放资源 session.close(); } public void deleteUser(Integer userId) { //1.根据factory获取SqlSession对象 SqlSession session = factory.openSession(); //2.调用方法,实现保存 session.update("com.sunyan.dao.UserDao.deleteUser", userId); //3.提交事务 session.commit(); //4.释放资源 session.close(); } public User findById(Integer userId) { //1.根据factory获取SqlSession对象 SqlSession session = factory.openSession(); //2.调用SqlSession中的方法实现查询列表 User users = session.selectOne("com.sunyan.dao.UserDao.findById",userId);//参数就是配置信息的key //3.释放资源 session.close(); return users; } public List<User> findByName(String username) { //1.根据factory获取SqlSession对象 SqlSession session = factory.openSession(); //2.调用SqlSession中的方法实现查询列表 List<User> users = session.selectList("com.sunyan.dao.UserDao.findByName", username);//参数就是配置信息的key //3.释放资源 session.close(); return users; } public int findTotal() { //1.根据factory获取SqlSession对象 SqlSession session = factory.openSession(); //2.调用SqlSession中的方法实现查询列表 Integer count = session.selectOne("com.sunyan.dao.UserDao.findTotal");//参数就是配置信息的key //3.释放资源 session.close(); return count; } }
持久层映射配置
<?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.sunyan.dao.UserDao"> <!--查询所有--> <select id="findAll" resultType="com.sunyan.domain.User"> select * from user; </select> <!--保存用户--> <insert id="saveUser" parameterType="com.sunyan.domain.User"> -- 配置插入操作后,获取插入数据的id <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER"> select last_insert_id(); </selectKey> insert into user(username, address, sex,birthday)values (#{username},#{address},#{sex},#{birthday}); </insert> <!--更新用户--> <update id="updateUser" parameterType="com.sunyan.domain.User"> update user set username=#{username}, address=#{address}, sex=#{sex},birthday=#{birthday} where id=#{id}; </update> <!--删除用户--> <delete id="deleteUser" parameterType="java.lang.Integer"> delete from user where id=#{uid}; </delete> <!--根据id查询用户--> <select id="findById" parameterType="INT" resultType="com.sunyan.domain.User"> select * from user where id=#{uid}; </select> <!--根据名称模糊查询--> <select id="findByName" parameterType="String" resultType="com.sunyan.domain.User"> <!-- select * from user where username like #{username};--> select * from user where username like '%${value}%'; </select> <!--获取用户的总记录条数--> <select id="findTotal" resultType="int"> select count(id) from user; </select> </mapper>
测试类
package com.sunyan.test; import com.sunyan.dao.UserDao; import com.sunyan.dao.impl.UserDaoImpl; import com.sunyan.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.InputStream; import java.util.Date; import java.util.List; /** * 测试mybatis的crud操作 */ public class MybatisTest { private InputStream in; private SqlSession sqlSession; private UserDao userDao; @Before//用于在测试方法之前执行 public void init() throws Exception { //1.读取配置文件,生成字节输入流 in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.获取SqlSessionFactory SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); //3.使用工厂对象创建dao对象 userDao = new UserDaoImpl(factory); } @After//用于在测试方法之后执行 public void destroy() throws Exception { //6.释放资源 in.close(); } /** * 测试查询所有 */ @Test public void testFindAll() { //5.执行查询所有方法 List<User> users = userDao.findAll(); for (User user : users) { System.out.println(user); } } /** * 测试保存操作 */ @Test public void testSave() { User user = new User(); user.setUsername("mybatis last insertid"); user.setAddress("北京市顺义区"); user.setSex("男"); user.setBirthday(new Date()); System.out.println("保存操作之前:" + user); //5.执行保存方法 userDao.saveUser(user); System.out.println("保存操作之后:" + user); } /** * 测试更新操作 */ @Test public void testUpdate() { User user = new User(); user.setId(50); user.setUsername("userdaoimpl update user"); user.setAddress("北京市顺义区"); user.setSex("女"); user.setBirthday(new Date()); //5.执行更新方法 userDao.updateUser(user); } /** * 测试删除 */ @Test public void testDelete() { //5.执行删除操作 userDao.deleteUser(54); } /** * 测试查询 */ @Test public void testFindOne() { //5.执行查询一个方法 User user = userDao.findById(50); System.out.println(user); } /** * 测试模糊查询操作 */ @Test public void testFindByName() { //5.执行查询一个方法 List<User> users = userDao.findByName("%王%"); for (User user : users) { System.out.println(user); } } /** * 查询总记录条数 */ @Test public void testFindTotal() { //5.执行查询一个方法 int total = userDao.findTotal(); System.out.println(total); } }
相关推荐
dongxurr 2020-08-08
园搬家测试账号 2020-06-12
技术之博大精深 2020-06-10
snowphy 2020-05-12
snowguy 2020-05-03
yunzhonmghe 2020-04-07
kevincheung 2020-02-20
neweastsun 2020-02-18
疯狂老司机 2020-02-13
xcguoyu 2019-12-04
纯粹的果子 2020-01-03
smalllove 2019-12-29
横云断岭 2019-12-29
zhaojp0 2019-12-29
javamagicsun 2019-12-11
Andrea0 2019-11-30
thisisid 2019-11-16