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 ...
随机推荐
- python 爬虫登录保存会话去获取只有登录能获取的数据
#!/usr/bin/env python # -*- coding: utf-8 -*- # import ConfigParser import datetime import sys impor ...
- VirtualBox 安装Centos7 无法上网 ping不同的解决方法
进入目录: cd /etc/sysconfig/network-scripts/ 用ls命令查看网卡配置文件名(在CENTOS7中网卡名貌似变成了随机数字,所以每台机器的网卡名并不相同) 编辑网卡配置 ...
- 系统数据库--恢复Master数据库
实现步骤:关闭SQL SERVER 服务,使用DAC登录 在cmd下还原master 重启SQL SERVER 服务
- BP神经网络研究(一)
本随笔参考文章:<BP神经网络详解与实例>(链接: https://pan.baidu.com/s/1e2niIvD9KtLXEqwXtgdXxw 密码: vb8d) 本随笔原创,转发请注 ...
- Https&证书
参考 http站点转https站点教程 http站点转https站点教程 HTTP与HTTPS的区别 Http站点转为Https: 为域名购买/申请证书(免费型DV SSL) 把证书部署到web se ...
- UML uml高级知识之用例图
uml高级知识之用例图 建模工具推荐使用 visio2010: include:选择菜单栏中的'UML'->单击’构造型‘->新建->构造型那里输入include->基类那里选 ...
- SDOI2013直径(树的直径)
题目描述: 点这里 题目大意: 就是在一个树上找其直径的长度是多少,以及有多少条边满足所有的直径都经过该边. 题解: 首先,第一问很好求,两边dfs就行了,第一次从任一点找距它最远的点,再从这个点找距 ...
- php-fpm.conf 解析
以下内容转自:http://www.4wei.cn/archives/1002061 约定几个目录/usr/local/php/sbin/php-fpm/usr/local/php/etc/php-f ...
- [AGC006E] Rotate 3x3 树状数组+贪心
Description XFZ在北京一环内有一套房. XFZ房子的地砖呈网格状分布,是一个3∗N3∗N的网格.XFZ在买下这套房时,每个地砖上有一个数字,位置为(i,j)(i,j)的地砖上的数 ...
- 二,php的错误处理
php处理错误的三种方式: 简单的die()语句: 自定义错误和错误触发器:错误日志: 1,简单的die()语句 if(!file_exists("aaa.txt")){ die( ...