Mybatis Dao开发方法(二)
使用Mapper代理的方式进行开发
Mapper开发的原理##
使用Mybatis的Mapper代理方式进行开发,使用该方式,只需要编写Mapper接口,不再需要编写实现类,由Mybatis框架通过接口定义来自动生成接口的动态代理对象。
Mapper代理开发要遵循的原则
1. Mapper.xml文件中的namespace要和Mapper接口的类路径相同。
2. Mapper接口中的方法名称要和Mapper.xml中定义的每个statement的id相同。
3. Mapper接口的输入参数类型要和Mapper.xml文件中定义的相对应sql的parameterType的类型相同。
4. Mapper接口的输出参数类型要和Mapper.xml文件中定义的相对应的sql的resultType的类型相同。
Mapper代理开发过程
1. 创建UserMapper.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:Mapper接口类的路径-->
<mapper namespace="com.jack.dao.UserMapper">
<!--根据id查询用户-->
<select id="findUserById" parameterType="int" resultType="User">
SELECT * FROM user WHERE id=#{id}
</select>
<!--根据用户名模糊查询用户信息-->
<select id="findUserByName" parameterType="String" resultType="User" >
SELECT * FROM user WHERE username LIKE '%${value}%'
</select>
<!--插入用户信息-->
<insert id="addUser" parameterType="User">
<selectKey keyProperty="id" order="AFTER" resultType="Integer">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO user(username,birthday,sex,address) VALUE (#{username},#{birthday},#{sex},#{address})
</insert>
<!--根据id修改用户信息-->
<update id="updateUserById" parameterType="User">
UPDATE user SET username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} WHERE id=#{id}
</update>
<!--根据id删除用户信息-->
<delete id="deleteUserById" parameterType="int">
DELETE FROM user WHERE id=#{value}
</delete>
</mapper>
2、编写UserMapper接口文件
public interface UserMapper {
//根据id查询用户信息
public User findUserById(int id) throws Exception;
//根据用户名查询用户
public List<User> findUserByName(String name) throws Exception;
//插入用户信息
public int addUser(User user) throws Exception;
//根据id修改用户信息
public void updateUserById(User user) throws Exception;
//根据id删除用户信息
public void deleteUserById(int id) throws Exception;
}
3、编写测试代码
public class UserTest {
public SqlSessionFactory sessionFactory;
public SqlSession sqlSession;
public SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
@Before
public void setUp() throws IOException {
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void findUserById(){
try {
sqlSession = sessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.findUserById(1);
System.out.println("查询成功,信息如下:");
if(user.getBirthday() != null){
simpleDateFormat.format(user.getBirthday());
}
System.out.println(user);
}catch (Exception e){
System.out.println("查询失败");
}finally {
sqlSession.close();
}
}
@Test
public void findUserByName(){
try {
sqlSession = sessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> list = userMapper.findUserByName("小明");
System.out.println("查询成功,信息如下:");
for (User user: list) {
if(user.getBirthday() != null){
simpleDateFormat.format(user.getBirthday());
}
System.out.println(user);
}
}catch (Exception e){
System.out.println("查询失败");
}finally {
sqlSession.close();
}
}
@Test
public void addUser(){
try {
sqlSession = sessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setUsername("小布");
user.setBirthday(new Date());
user.setSex("1");
user.setAddress("湖北 十堰");
int id = userMapper.addUser(user);
System.out.println("插入成功,新插入的用户id为:"+user.getId());
sqlSession.commit();
}catch (Exception e){
System.out.println("插入失败");
}finally {
sqlSession.close();
}
}
@Test
public void updateUserById(){
try {
sqlSession = sessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setId(4);
user.setUsername("小布");
user.setBirthday(new Date());
user.setSex("0");
user.setAddress("湖北 十堰");
userMapper.updateUserById(user);
sqlSession.commit();
System.out.println("id为"+user.getId()+"的用户信息更新成功");
}catch (Exception e){
System.out.println("更新失败");
}finally {
sqlSession.close();
}
}
@Test
public void deleteUserById(){
try {
sqlSession = sessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.deleteUserById(3);
sqlSession.commit();
System.out.println("删除成功");
}catch (Exception e){
System.out.println("更新失败");
}finally {
sqlSession.close();
}
}
其余步骤和原生Dao开发相同
Mybatis Dao开发方法(二)的更多相关文章
- Mybatis学习笔记(三) —— DAO开发方法
一.SqlSession的使用范围 SqlSession中封装了对数据库的操作,如:查询.插入.更新.删除等. SqlSession通过SqlSessionFactory创建. SqlSessionF ...
- mybatis由浅入深day01_5mybatis开发dao的方法(5.1SqlSession使用范围_5.2原始dao开发方法)
5 mybatis开发dao的方法 5.1 SqlSession使用范围 5.1.1 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂 ...
- 【MyBatis学习03】原始dao开发方法及其弊端
上一篇博文总结了一下mybatis的入门,接下来就要开发dao方法了,这篇博文主要总结一下mybatis中原始dao开发的方法,最后并总结一下原始dao开发方法的弊端.mybatis中dao开发应该使 ...
- Mybatis的原始dao开发方法
在进入主题之前先提一下sqlSession.sqlSession是一个面向用户(程序员)的接口. sqlSession中提供了很多操作数据库的方法,如: selectOne(返回单个对象).selec ...
- java-mybaits-00202-DAO-原始DAO开发方法
原始Dao开发方法需要程序员编写Dao接口和Dao实现类. 原本的ibatis的 需要在dao实现类中注入一个SqlSessionFactory工厂. 1.思路 程序员需要写dao ...
- MyBatis dao层 方法传参
MyBatis dao层 方法传参有三种方法. 1. 以下标的方法获取参数. <update id="insertSuccessKilled"> INSER ...
- Mybatis笔记 - 原始Dao开发方法
使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法.原始Dao的开发方式是基于入门程序的基础上,对 控制程序 进行分层开发,程序员需要 编写 Dao接口 和 ...
- Spring 整合Mybatis dao原始方法
先看一下项目图,基本就理解了整合的内容 这次主角不再是Mybats的配置文件SqlMapConfig.xml了,而是Spring的applicationContext.xml applicationC ...
- Mybatis Dao开发的两种方式(一)
原始Dao的开发方式: 1.创建数据库配置文件db.properties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localh ...
随机推荐
- Android-原生对话框
package liudeli.ui.all; import android.app.Activity; import android.app.AlertDialog; import android. ...
- HBase介绍(2)---数据存储结构
在本文中的HBase术语:基于列:column-oriented行:row列组:column families列:column单元:cell 理解HBase(一个开源的Google的BigTable实 ...
- django drf安装和doc生成
1.打开drf官网https://www.django-rest-framework.org/,把相关的包pip install 2.INSTALLED_APPS添加drf 3.url配置 4.tes ...
- 安装npm及cnpm
一.安装npm 1. 使用npm首先需要下载node.js 进入nodejs官网nodejs下载,如下图 : 选择适合自己的系统,我这里使用的是window10 64bit 2. 开始安装 **选好需 ...
- linux 磁盘保留空间设置
1.查看保留空间大小 tune2fs -l /dev/sda8 reserved blocks 2.调整保留空间大小(系统默认5%) tune2fs -m 0.5 /dev/sda8 参考链接:ht ...
- SFML从入门到放弃(0) 配置环境
SFML从入门到放弃(0) 配置环境 恩..开始划水..学sfml的时候顺便做点笔记什么的.. 安装 在linux里面打开终端 然后输入 sudo apt-get install libsfml-de ...
- RDLC报表的相关技巧三(数量/金额的逐页累加)
数量/金额的逐页累加,不是当页小计. 核心步骤: 1.在Group1大组中加入小组Group2,2.Group2的组尾加入一个计算框 : =RunningValue(Fields!BaseAmount ...
- php-fpm.conf 解析
以下内容转自:http://www.4wei.cn/archives/1002061 约定几个目录/usr/local/php/sbin/php-fpm/usr/local/php/etc/php-f ...
- 性能分析工具VisualVM for eclipse安装过程总结
Java VisualVM Java VisualVM is a tool that provides a visual interface for viewing detailed informat ...
- 网络基础 01_OSI网际互联
1 通信概述 网络是用物理链路将各个孤立的工作站或主机相连在一起,组成数据链路,从而达到资源共享和通信的目的. 通信是人与人之间通过某种媒体进行的信息交流与传递. 网络通信是通过网络将各个孤立的设备进 ...