MyBatis的Dao开发模式
Posted 大师兄丶2K
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis的Dao开发模式相关的知识,希望对你有一定的参考价值。
MyBatis的Dao开发模式,先来一个例子
1.User.java 实体类以及
SqlMapConfig.xml配置文件
,见上一篇文章
2.UserDao.java接口
1 package com.test.dao; 2 3 import com.test.entity.User; 4 5 /** 6 * 7 * @author Mr 8 * dao模式1 例子 9 */ 10 public interface UserDao { 11 //根据id查找用户 12 public User findUserById(int id); 13 //添加数据到数据库 14 public void insertUser(User user); 15 //删除一条数据 根据id删除 16 public void deleteUser(int id); 17 }
3.UserDaoImpl.java接口的实现类
1 package com.test.dao.impl; 2 3 import org.apache.ibatis.session.SqlSession; 4 import org.apache.ibatis.session.SqlSessionFactory; 5 6 import com.test.dao.UserDao; 7 import com.test.entity.User; 8 /** 9 * 10 * @author Mr 11 * 接口的实现类 12 */ 13 public class UserDaoImpl implements UserDao{ 14 //工厂私有化 15 private SqlSessionFactory sqlSessionFactory; 16 //添加带参的构造方法 17 public UserDaoImpl(SqlSessionFactory sqlSessionFactory) { 18 this.sqlSessionFactory = sqlSessionFactory; 19 } 20 21 @Override 22 public User findUserById(int id) { 23 //获取数据库操作对象 24 SqlSession sqlSession = sqlSessionFactory.openSession(); 25 //操作数据库 通过selectOne获取一条记录 26 User user = sqlSession.selectOne("test.findUserById", id); 27 //关闭连接 释放资源 28 sqlSession.close(); 29 return user; 30 } 31 32 @Override 33 public void insertUser(User user) { 34 //获取数据库操作对象 35 SqlSession sqlSession = sqlSessionFactory.openSession(); 36 //使用insert 添加数据 37 sqlSession.insert("test.insertUser", user); 38 //提交事务 39 sqlSession.commit(); 40 //释放资源 41 sqlSession.close(); 42 43 } 44 45 @Override 46 public void deleteUser(int id) { 47 //获取数据库操作对象 48 SqlSession sqlSession = sqlSessionFactory.openSession(); 49 //删除一条记录 50 sqlSession.delete("test.delUserById", id); 51 //提交事务 52 sqlSession.commit(); 53 //释放资源 54 sqlSession.close(); 55 56 } 57 58 }
4.User.xml配置文件
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <!-- namespace命名空间,为了对sql语句进行隔离,方便管理 ,mapper开发dao方式,使用namespace有特殊作用 --> 6 <mapper namespace="test"> 7 <!-- 这里可以配置多个sql 8 根据用户的id查询 9 通过select进行查询 10 select * from userss WHERE ID=#{id} 从plsql中测试完成复制过来 11 parameterType 指定输入参数的类型 这里是int 12 #{} 表示占位符 13 #{id} 其中的id表示输入参数,参数的名称是id,如果输入参数是简单类型,可以使用#{} 14 resultType 指定sql语句输出结果的类型,我们这里是Java对象 15 --> 16 <select id="findUserById" parameterType="int" resultType="com.test.entity.User"> 17 select * from userss WHERE ID=#{id} 18 </select> 19 20 <!-- 根据姓名模糊查询 --> 21 <select id="findUserByName" parameterType="java.lang.String" resultType="com.test.entity.User"> 22 select * from userss WHERE username LIKE ‘%${value}%‘ 23 </select> 24 <!-- 添加用户 --> 25 <insert id="insertUser" parameterType="com.test.entity.User"> 26 insert into userss values(seq_users_id.nextval,#{username},#{birthday},#{sex},#{address}) 27 </insert> 28 <!-- 删除用户 --> 29 <delete id="delUserById" parameterType="java.lang.Integer"> 30 DELETE userss WHERE ID=#{id} 31 </delete> 32 <!-- 更新 --> 33 <update id="upUser" parameterType="com.test.entity.User"> 34 UPDATE userss SET username=#{username},address=#{address} WHERE ID=#{id} 35 </update> 36 37 </mapper>
5.Test.java测试类
1 package com.test.demo; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 6 import org.apache.ibatis.io.Resources; 7 import org.apache.ibatis.session.SqlSessionFactory; 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 9 10 import com.test.dao.UserDao; 11 import com.test.dao.impl.UserDaoImpl; 12 import com.test.entity.User; 13 14 /** 15 * 16 * @author Mr 17 * 测试dao开发模式 18 */ 19 public class Test2 { 20 21 public static void main(String[] args) { 22 try { 23 //mybatis核心配置文件 24 String resource = "SqlMapConfig.xml"; 25 //读取配置文件 26 InputStream config = Resources.getResourceAsStream(resource); 27 //获取sqlSessionFactory工厂 28 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(config); 29 //创建对象工厂传递到impl类种 30 UserDao udao = new UserDaoImpl(sqlSessionFactory); 31 User user = udao.findUserById(31); 32 System.out.println(user); 33 } catch (IOException e) { 34 // TODO Auto-generated catch block 35 e.printStackTrace(); 36 } 37 38 } 39 40 }
以上是关于MyBatis的Dao开发模式的主要内容,如果未能解决你的问题,请参考以下文章