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 ...
随机推荐
- C++ 的写好库编译好,DELPHI或者Java做界面,iOS 和 Android 就都搞定。
当然也可以使用BCB和相关的开发库来开发App,只是别人没法帮助你. 摘自<想到做到-Android开发关键技术与精彩案例>.(詹建飞) p40
- 【模板模式】 Template Pattern
模板模式 又叫模板方法模式,在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情冴下,重新定义算法中的某些步骤(这个我觉得很抽象,很抽象) e:学会说“不 ...
- Hadoop 文件命令
* 文件操作 * 查看目录文件 * $ hadoop dfs -ls /user/cl * * 创建文件目录 * $ hadoop dfs -mkdir /user/cl/temp * * 删除文件 ...
- leetcode 反转字符串
请编写一个函数,其功能是将输入的字符串反转过来. 示例: 输入:s = "hello" 返回:"olleh" /** * @param {string} s * ...
- 写一个Singleton出来。
单例模式是一种创建模式. 这种模式只涉及一个单独的类,它负责创建自己的对象. 该类确保只创建单个对象. 这个类提供了一种访问其唯一对象的方法. 例子: MainWindow类的构造函数是私有的,并且有 ...
- linux命令之系统管理命令(下)
1.chkconfig:管理开机服务 该命令为linux系统中的系统服务管理工具,可以查询和更新不同的运行等级下系统服务的启动状态. 选项 说明 --list(常用) 显示不同运行级别下服务的启动状态 ...
- Mysql表操作《一》表的增删改查
一.表介绍 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段 id,name,qq,age称为字段,其余的,一行内容称为一条记录 二.创建表 语法 ...
- “全栈2019”Java第五十章:继承与构造方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- css ie6双倍margin现象
IE6双倍margin bug 当出现连续浮动的元素,携带和浮动方向相同的margin时,队首的元素,会双倍marign. 解决方案: 1)使浮动的方向和margin的方向,相反. 所以,你就会发现, ...
- Codeforces Round #556 (Div. 2) - D. Three Religions(动态规划)
Problem Codeforces Round #556 (Div. 2) - D. Three Religions Time Limit: 3000 mSec Problem Descripti ...