项目结构
持久层 Dao 接口
IUserDao:
package com.keafmd.dao; import com.keafmd.domain.User; import java.util.List; /** * Keafmd * * @ClassName: IUserDao * @Description: 用户的持久层接口 * @author: 牛哄哄的柯南 * @date: 2021-02-06 19:29 */ public interface IUserDao { /** * 查询所有操作 * @return */ List<User> findAll(); /** * 保存用户 * @param user */ void saveUser(User user); /** * 更新用户 * @param user */ void updateUser(User user); /** * 根据id删除用户 * @param id */ void deleteUser(Integer id); /** * 根据id查新用户信息 * @param id * @return */ User findById(Integer id); /** * 根据名称模糊查询 * @param username * @return */ List<User> findByName(String username); /** * 查询总用户数 * @return */ int findTotal(); }
持久层 Dao 实现类
package com.keafmd.dao.impl; import com.keafmd.dao.IUserDao; import com.keafmd.domain.User; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import java.util.List; /** * Keafmd * * @ClassName: UserDaoImpl * @Description: * @author: 牛哄哄的柯南 * @date: 2021-02-09 11:09 */ public class UserDaoImpl implements IUserDao { 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.keafmd.dao.IUserDao.findAll");//参数为能获取配置信息的key //3.释放资源 session.close(); return users; } public void saveUser(User user) { //1.根据factory获取SQLSession对象 SqlSession session = factory.openSession(); //2.调用SqlSession中的方法,实现保存 session.insert("com.keafmd.dao.IUserDao.saveUser",user); //3.提交事务 session.commit(); //释放资源 session.close(); } public void updateUser(User user) { //1.根据factory获取SQLSession对象 SqlSession session = factory.openSession(); //2.调用SqlSession中的方法,实现更新 session.update("com.keafmd.dao.IUserDao.updateUser",user); //3.提交事务 session.commit(); //释放资源 session.close(); } public void deleteUser(Integer id) { //1.根据factory获取SQLSession对象 SqlSession session = factory.openSession(); //2.调用SqlSession中的方法,实现更新 session.update("com.keafmd.dao.IUserDao.deleteUser",id); //3.提交事务 session.commit(); //释放资源 session.close(); } public User findById(Integer id) { //1.根据factory获取SQLSession对象 SqlSession session = factory.openSession(); //2.调用SqlSession中的方法,实现查询一个 User user = session.selectOne("com.keafmd.dao.IUserDao.findById",id);//参数为能获取配置信息的key //3.释放资源 session.close(); return user; } public List<User> findByName(String username) { //1.根据factory获取SQLSession对象 SqlSession session = factory.openSession(); //2.调用SqlSession中的方法,实现查询列表 List<User> users = session.selectList("com.keafmd.dao.IUserDao.findByName",username);//参数为能获取配置信息的key //3.释放资源 session.close(); return users; } public int findTotal() { //1.根据factory获取SQLSession对象 SqlSession session = factory.openSession(); return session.selectOne("com.keafmd.dao.IUserDao.findTotal"); } }
持久层映射配置
IUserDao.xml:
<?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.keafmd.dao.IUserDao"> <!--配置查询所有--> <!--id为方法名称--> <select id="findAll" resultType="com.keafmd.domain.User"> select * from user </select> <!--保存用户--> <insert id="saveUser" parameterType="com.keafmd.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.keafmd.domain.User"> update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id} </update> <!--删除用户--> <!--#{id}这里面写个占位符就行--> <delete id="deleteUser" parameterType="Integer"> delete from user where id = #{uid} </delete> <!--根据id查询用户--> <select id="findById" parameterType="Integer" resultType="com.keafmd.domain.User"> select * from user where id = #{id} </select> <!--根据名称模糊查询--> <select id="findByName" parameterType="String" resultType="com.keafmd.domain.User"> <!--select * from user where username like #{name}--> <!--value是固定的,源码写固定了,这种了解即可,不推荐--> select * from user where username like '%${value}%' </select> <!--查询总用户数--> <select id="findTotal" resultType="int"> select count(id) from user; </select> </mapper>
测试类
MybatisTest:
package com.keafmd.test; import com.keafmd.dao.IUserDao; import com.keafmd.dao.impl.UserDaoImpl; import com.keafmd.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; /** * Keafmd * * @ClassName: MybatisTest * @Description: 测试类,测试crud操作 * @author: 牛哄哄的柯南 * @date: 2021-02-08 15:24 */ public class MybatisTest { private InputStream in; private IUserDao userDao; @Before // 用于在测试方法执行前执行 public void init()throws Exception{ //1.读取配置文件,生成字节输入流 in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.创建SqlSessionFactory工厂 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in); //3.使用工厂对象创建dao对象 userDao = new UserDaoImpl(factory); } @After // 用于在测试方法执行后执行 public void destory() throws Exception{ //6.释放资源 in.close(); } /** * 查询所有 * @throws Exception */ @Test public void testFindAll() throws Exception { //5.使用代理对象执行方法 List<User> users = userDao.findAll(); for (User user : users) { System.out.println(user); } } /** * 测试保存操作 */ @Test public void testSave() throws Exception { User user = new User(); user.setUsername("Keafmd DAO"); user.setSex("男"); user.setBirthday(new Date()); user.setAddress("XXXXXXX"); System.out.println("保存操作前:"+user); //5.执行保存方法 userDao.saveUser(user); System.out.println("保存操作后:"+user); } /** * 测试更新 * @throws Exception */ @Test public void testUpdate() throws Exception { User user = new User(); user.setId(51); user.setUsername("update DAO"); user.setSex("男"); user.setBirthday(new Date()); user.setAddress("XXXXXXX"); //5.执行更新方法 userDao.updateUser(user); } /** * 测试删除 * @throws Exception */ @Test public void testDelete() throws Exception { //5.执行删除方法 userDao.deleteUser(46); } /** * 查询一个 * @throws Exception */ @Test public void testFindOne() throws Exception { //5.执行查询一个方法 User user = userDao.findById(50); System.out.println(user); } /** * 根据username模糊查询 * @throws Exception */ @Test public void testFindByName() throws Exception { //5.执行模糊查询方法 List<User> users = userDao.findByName("%王%"); for (User user : users) { System.out.println(user); } } /** * 查询记录总条数 * @throws Exception */ @Test public void testFindTiotal() throws Exception { //5.执行记录总条数 int total = userDao.findTotal(); System.out.println(total); } }
以上就是Mybatis基于传统dao层的开发(完整代码演示)的全部内容。