原文链接:http://www.yiidian.com/mybatis/mybatis-dao.html
在MyBatis中,我们有两种Dao的写法,一种叫传统Dao写法,一种叫Mapper代理接口。下面看看如何实现。
1 传统Dao写法
1.1 编写CustomerDao接口
package com.yiidian.dao; import com.yiidian.domain.Customer; import java.util.List; /** * Dao接口 *一点教程网 - www.yiidian.com */ public interface CustomerDao { /** * 查询所有用户 */ public List<Customer> findAll(); /** * 添加 */ public void save(Customer customer); /** * 修改 */ public void update(Customer customer); /** * 查询一个 */ public Customer findById(Integer id); /** * 条件查询 */ public List<Customer> findByName(String name); /** * 删除 */ public void delete(Integer id); }
1.2 编写CustomerDao实现类
package com.yiidian.dao.impl; import com.yiidian.dao.CustomerDao; import com.yiidian.domain.Customer; import com.yiidian.utils.MyBatisUtils; import org.apache.ibatis.session.SqlSession; import java.util.List; /** * Dao实现类 */ public class CustomerDaoImpl implements CustomerDao{ @Override public List<Customer> findAll() { SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSession(); return sqlSession.selectList("com.yiidian.dao.CustomerDao.findAll"); } catch (Exception e) { e.printStackTrace(); } finally{ sqlSession.close(); } return null; } @Override public void save(Customer customer) { SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSession(); sqlSession.insert("com.yiidian.dao.CustomerDao.save", customer); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); sqlSession.rollback(); } finally{ sqlSession.close(); } } @Override public void update(Customer customer) { SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSession(); sqlSession.update("com.yiidian.dao.CustomerDao.update", customer); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); sqlSession.rollback(); } finally{ sqlSession.close(); } } @Override public Customer findById(Integer id) { SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSession(); return sqlSession.selectOne("com.yiidian.dao.CustomerDao.findById",id); } catch (Exception e) { e.printStackTrace(); } finally{ sqlSession.close(); } return null; } @Override public List<Customer> findByName(String name) { SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSession(); return sqlSession.selectList("com.yiidian.dao.CustomerDao.findByName",name); } catch (Exception e) { e.printStackTrace(); } finally{ sqlSession.close(); } return null; } @Override public void delete(Integer id) { SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSession(); sqlSession.delete("com.yiidian.dao.CustomerDao.delete", id); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); sqlSession.rollback(); } finally{ sqlSession.close(); } } }
传统方式的重点在于Dao实现类,在Dao实现类中,手动调用SqlSession提供的方法直接执行映射文件的SQL语句。
1.3 编写CustomerDao.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"> <!-- namespace: 用于指定该映射文件需要映射的Dao接口 --> <mapper namespace="com.yiidian.dao.CustomerDao"> <!--查询所有--> <select id="findAll" resultType="com.yiidian.domain.Customer"> select * from t_customer </select> <!--1.添加方法--> <insert id="save" parameterType="com.yiidian.domain.Customer"> INSERT INTO t_customer(NAME,gender,telephone) VALUES(#{name},#{gender},#{telephone}) </insert> <!--2.修改方法--> <update id="update" parameterType="com.yiidian.domain.Customer"> UPDATE t_customer SET NAME = #{name}, gender = #{gender}, telephone = #{telephone} WHERE id = #{id} </update> <!--查询一个--> <select id="findById" parameterType="integer" resultType="com.yiidian.domain.Customer"> select * from t_customer where id = #{id} </select> <!--条件查询--> <select id="findByName" parameterType="string" resultType="com.yiidian.domain.Customer"> select * from t_customer where name like #{name} </select> <!--删除--> <delete id="delete" parameterType="integer"> delete from t_customer where id = #{id} </delete> </mapper>
1.4 编写测试类
package com.yiidian.mybatis; import com.yiidian.dao.CustomerDao; import com.yiidian.dao.impl.CustomerDaoImpl; import com.yiidian.domain.Customer; import com.yiidian.utils.MyBatisUtils; 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.Test; import java.io.IOException; import java.io.InputStream; import java.util.List; /** * MyBatis测试类 - 传统Dao写法 * 一点教程网 - www.yiidian.com */ public class TestCustomerDao { /** * 添加 */ @Test public void testSave(){ //1.获取SqlSession对象 SqlSession session = MyBatisUtils.getSession(); //2.创建传统Dao实现类对象 CustomerDao customerDao = new CustomerDaoImpl(); //3.调用save方法 Customer customer = new Customer(); customer.setName("小苍"); customer.setGender("女"); customer.setTelephone("15755556666"); customerDao.save(customer); //4.关闭连接 session.close(); } /** * 修改 */ @Test public void testUpdate(){ //1.获取SqlSession对象 SqlSession session = MyBatisUtils.getSession(); //2.创建传统Dao实现类对象 CustomerDao customerDao = new CustomerDaoImpl(); //3.调用update方法 Customer customer = new Customer(); customer.setId(5); customer.setName("小泽"); customer.setGender("女"); customer.setTelephone("15755556666"); customerDao.update(customer); session.commit(); //4.关闭连接 session.close(); } /** * 查询所有 */ @Test public void testFindAll(){ //1.获取SqlSession对象 SqlSession session = MyBatisUtils.getSession(); //2.创建传统Dao实现类对象 CustomerDao customerDao = new CustomerDaoImpl(); //3.调用findAll方法 List<Customer> list = customerDao.findAll(); for(Customer cust:list){ System.out.println(cust); } //4.关闭连接 session.close(); } /** * 查询一个 */ @Test public void testFindById(){ //1.获取SqlSession对象 SqlSession session = MyBatisUtils.getSession(); //2.创建传统Dao实现类对象 CustomerDao customerDao = new CustomerDaoImpl(); //3.调用findById方法 Customer customer = customerDao.findById(3); System.out.println(customer); //4.关闭连接 session.close(); } /** * 条件查询 */ @Test public void testFindByName(){ //1.获取SqlSession对象 SqlSession session = MyBatisUtils.getSession(); //2.创建传统Dao实现类对象 CustomerDao customerDao = new CustomerDaoImpl(); //3.调用findByName方法 List<Customer> list = customerDao.findByName("%小%"); for(Customer cust:list){ System.out.println(cust); } //4.关闭连接 session.close(); } /** * 删除 */ @Test public void testDelete(){ //1.获取SqlSession对象 SqlSession session = MyBatisUtils.getSession(); //2.创建传统Dao实现类对象 CustomerDao customerDao = new CustomerDaoImpl(); //3.调用findByName方法 customerDao.delete(5); // 提交事务 session.commit(); //4.关闭连接 session.close(); } }
2 Mapper代理接口
2.1 编写CustomerDao接口
package com.yiidian.dao; import com.yiidian.domain.Customer; import java.util.List; /** * Dao接口 *一点教程网 - www.yiidian.com */ public interface CustomerDao { /** * 查询所有用户 */ public List<Customer> findAll(); /** * 添加 */ public void save(Customer customer); /** * 修改 */ public void update(Customer customer); /** * 查询一个 */ public Customer findById(Integer id); /** * 条件查询 */ public List<Customer> findByName(String name); /** * 删除 */ public void delete(Integer id); }
2.2 编写CustomerDao.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"> <!-- namespace: 用于指定该映射文件需要映射的Dao接口 --> <mapper namespace="com.yiidian.dao.CustomerDao"> <!--查询所有--> <select id="findAll" resultType="com.yiidian.domain.Customer"> select * from t_customer </select> <!--1.添加方法--> <insert id="save" parameterType="com.yiidian.domain.Customer"> INSERT INTO t_customer(NAME,gender,telephone) VALUES(#{name},#{gender},#{telephone}) </insert> <!--2.修改方法--> <update id="update" parameterType="com.yiidian.domain.Customer"> UPDATE t_customer SET NAME = #{name}, gender = #{gender}, telephone = #{telephone} WHERE id = #{id} </update> <!--查询一个--> <select id="findById" parameterType="integer" resultType="com.yiidian.domain.Customer"> select * from t_customer where id = #{id} </select> <!--条件查询--> <select id="findByName" parameterType="string" resultType="com.yiidian.domain.Customer"> select * from t_customer where name like #{name} </select> <!--删除--> <delete id="delete" parameterType="integer"> delete from t_customer where id = #{id} </delete> </mapper>
2.3 编写测试类
package com.yiidian.mybatis; import com.yiidian.dao.CustomerDao; import com.yiidian.dao.impl.CustomerDaoImpl; import com.yiidian.domain.Customer; import com.yiidian.utils.MyBatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; /** * MyBatis测试类 - Mapper代理接口 * 一点教程网 - www.yiidian.com */ public class TestCustomerDao2 { /** * 添加 */ @Test public void testSave(){ //1.获取SqlSession对象 SqlSession session = MyBatisUtils.getSession(); //2.生成Dao代理对象 CustomerDao customerDao = session.getMapper(CustomerDao.class); //3.调用save方法 Customer customer = new Customer(); customer.setName("小苍"); customer.setGender("女"); customer.setTelephone("15755556666"); customerDao.save(customer); //4.关闭连接 session.close(); } /** * 修改 */ @Test public void testUpdate(){ //1.获取SqlSession对象 SqlSession session = MyBatisUtils.getSession(); //2.生成Dao代理对象 CustomerDao customerDao = session.getMapper(CustomerDao.class); //3.调用update方法 Customer customer = new Customer(); customer.setId(5); customer.setName("小泽"); customer.setGender("女"); customer.setTelephone("15755556666"); customerDao.update(customer); session.commit(); //4.关闭连接 session.close(); } /** * 查询所有 */ @Test public void testFindAll(){ //1.获取SqlSession对象 SqlSession session = MyBatisUtils.getSession(); //2.生成Dao代理对象 CustomerDao customerDao = session.getMapper(CustomerDao.class); //3.调用findAll方法 List<Customer> list = customerDao.findAll(); for(Customer cust:list){ System.out.println(cust); } //4.关闭连接 session.close(); } /** * 查询一个 */ @Test public void testFindById(){ //1.获取SqlSession对象 SqlSession session = MyBatisUtils.getSession(); //2.生成Dao代理对象 CustomerDao customerDao = session.getMapper(CustomerDao.class); //3.调用findById方法 Customer customer = customerDao.findById(5); System.out.println(customer); //4.关闭连接 session.close(); } /** * 条件查询 */ @Test public void testFindByName(){ //1.获取SqlSession对象 SqlSession session = MyBatisUtils.getSession(); //2.生成Dao代理对象 CustomerDao customerDao = session.getMapper(CustomerDao.class); //3.调用findByName方法 List<Customer> list = customerDao.findByName("%小%"); for(Customer cust:list){ System.out.println(cust); } //4.关闭连接 session.close(); } /** * 删除 */ @Test public void testDelete(){ //1.获取SqlSession对象 SqlSession session = MyBatisUtils.getSession(); //2.生成Dao代理对象 CustomerDao customerDao = session.getMapper(CustomerDao.class); //3.调用findByName方法 customerDao.delete(5); // 提交事务 session.commit(); //4.关闭连接 session.close(); } }
源码下载:https://pan.baidu.com/s/1ZsM5CAu026zfF3wZEA-aFQ
欢迎关注我的公众号::一点教程。获得独家整理的学习资源和日常干货推送。
如果您对我的系列教程感兴趣,也可以关注我的网站:yiidian.com
来源:https://www.cnblogs.com/yiidian/p/12590751.html