mybatis 入门进阶之 mapper
由于上节 《mybatis 入门优化》中的dao实现类耦合了user.xml中的statment的id,例如:src.main.resource.userMapper.findUserByName。
这节采用mapper接口的方式实现dao。
IWebUserDao.java
package com.mozi.dao; import java.util.List;
import com.mozi.entity.*; public interface IWebUserDao {
/**根据用户名称模糊查询用户信息*/
public List<WebUser> findUserByName(String username); /** 添加用户*/
public void insertUser(WebUser user); /** 根据ID删除用户*/
public void deleteUser(String id); /** 根据ID更新用户*/
public void updateUser(WebUser user);
}
sqlmap\userMapper.xml,
注意:
1、mapper配置中的namespace必须与接口去路径一致如:com.mozi.dao.IWebUserDao。
2、mapper的statment的id跟接口中的方法名一致,参数类型一致。
<?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命名空间,作用就是对sql进行分类化的管理,理解为sql隔离
注意:使用mapper代理开发时,namespace有特殊作用
-->
<mapper namespace="com.mozi.dao.IWebUserDao">
<resultMap id="BaseResultMap" type="com.mozi.entity.WebUser" >
<id column="Name" property="name" jdbcType="VARCHAR" />
<result column="TrueName" property="trueName" jdbcType="VARCHAR" />
<result column="Pass" property="pass" jdbcType="VARCHAR" />
</resultMap>
<sql id="Base_Column_List" >
Name, TrueName, Pass
</sql> <select id="findUserById" parameterType="int" resultType="com.mozi.entity.WebUser" >
select * from WebUsers where id=#{id}
</select> <select id="findUserByName" parameterType="java.lang.String" resultType="com.mozi.entity.WebUser" >
select * from WebUsers where Name LIKE '%${value}%'
</select> <select id="findUserByName2" parameterType="java.lang.String" resultMap ="BaseResultMap" >
select * from WebUsers where Name LIKE '%${value}%'
</select> <!-- 添加用户 -->
<insert id="insertUser" parameterType="com.mozi.entity.WebUser" >
<!--
使用mysql的uuid(),实现非自增主键的返回。
执行过程:通过uuid()得到主键,将主键设置到user对象的Id的属性中,其次,在insert执行时,从user对象中取出Id属性值;
-->
insert into WebUsers (Name,TrueName,Pass) values(#{name},#{trueName},#{pass})
</insert> <!-- 删除用户 --> <delete id="deleteUser" parameterType="java.lang.String">
delete from WebUsers where Name=#{name}
</delete>
<!-- 更新用户 -->
<update id="updateUser" parameterType="com.mozi.entity.WebUser">
update WebUsers set Name=#{name},TrueName=#{trueName},Pass=#{pass}
where Name=#{name}
</update>
</mapper>
WebUserDaoMybatis3.java
package com.mozi.dao.impl; import java.util.List; import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory; import com.mozi.dao.IWebUserDao;
import com.mozi.entity.WebUser; public class WebUserDaoMybatis3 implements IWebUserDao {
private SqlSessionFactory sqlSessionFactory;
// 需要向dao实现类中注入SqlSessionFactory
// 通过构造方法注入
public WebUserDaoMybatis3(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
} @Override
public List<WebUser> findUserByName(String username) {
SqlSession sqlSession = sqlSessionFactory.openSession(); // 创建Usermapper对象,mybatis自动生成mapper代理对象
IWebUserDao mapper = sqlSession.getMapper(IWebUserDao.class);
List<WebUser> list = mapper.findUserByName(username);
sqlSession.close(); return list;
} @Override
public void insertUser(WebUser user) {
SqlSession sqlSession = sqlSessionFactory.openSession();
IWebUserDao mapper = sqlSession.getMapper(IWebUserDao.class);
// 执行插入操作
mapper.insertUser(user);
// 提交事务
sqlSession.commit();
// 释放资源
sqlSession.close();
} @Override
public void deleteUser(String id) {
SqlSession sqlSession = sqlSessionFactory.openSession();
IWebUserDao mapper = sqlSession.getMapper(IWebUserDao.class);
// 执行插入操作
mapper.deleteUser(id);
// 提交事务
sqlSession.commit();
// 释放资源
sqlSession.close();
} @Override
public void updateUser(WebUser user) {
SqlSession sqlSession = sqlSessionFactory.openSession();
IWebUserDao mapper = sqlSession.getMapper(IWebUserDao.class);
// 执行插入操作
mapper.updateUser(user);
// 提交事务
sqlSession.commit();
// 释放资源
sqlSession.close();
} }
测试类WebUserDaoImplTest.java
package com.mozi.test.java; import static org.junit.Assert.*; import java.io.IOException;
import java.io.InputStream;
import java.util.List; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test; import com.mozi.dao.IWebUserDao;
import com.mozi.dao.impl.WebUserDaoJdbc;
import com.mozi.dao.impl.WebUserDaoMybatis;
import com.mozi.dao.impl.WebUserDaoMybatis2;
import com.mozi.dao.impl.WebUserDaoMybatis3;
import com.mozi.entity.WebUser; public class WebUserDaoImplTest { private static SqlSessionFactory sqlSessionFactory = null; private static IWebUserDao dao = null; static{
String resource = "SqlMapConfig.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
dao = new WebUserDaoMybatis3(sqlSessionFactory);
} @Test
public void findUserByName() {
List<WebUser> userList = dao.findUserByName("aa");
System.out.println(userList);
assertNotNull(userList);
} @Test
public void insertUser() {
WebUser user = new WebUser();
user.setName("5");
user.setTrueName("lisi");
user.setPass("5");
dao.insertUser(user);
} @Test
public void deleteUser() {
dao.deleteUser("5");
} @Test
public void updateUser() {
WebUser user = new WebUser();
user.setName("5");
user.setTrueName("lisi");
user.setPass("666"); dao.updateUser(user);
}
}
mybatis 入门进阶之 mapper的更多相关文章
- MyBatis入门程序之Mapper代理方式
Mapper代理的开发方式,程序员只需要编写mapper接口(相当于dao接口)即可,MyBatis会自动为mapper接口生成动态代理实现类. 一.开发规范 1.mapper接口的全限定名要和map ...
- mybatis 入门进阶之 pojo
有时候我们dao方法声明的入参需要是自定义的pojo,以满足复杂的查询条件. IWebUserCustomDao.java package com.mozi.dao; import java.util ...
- mybatis入门篇:Mapper接口/关联查询/新增数据
1.数据准备 2.编写实体类 package com.forest.owl.entity; import java.util.Date; public class User { private Lon ...
- MyBatis入门程序之mapper映射文件常用配置命令
1.ResultMap高级结果映射 如果查询出的列名和属性名不一致,可以通过ResultMap做映射,放在statement的输出类型中 如下: 2.动态SQL,使用各种动态标签实现动态拼接sql,常 ...
- mybatis入门基础(二)----原始dao的开发和mapper代理开发
承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...
- Spring Boot入门系列(十七)整合Mybatis,创建自定义mapper 实现多表关联查询!
之前讲了Springboot整合Mybatis,介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.mybatis 插件自动生成的mappe ...
- MyBatis1:MyBatis入门
MyBatis是什么 MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的: MyBatis is a first class persistence fra ...
- MyBatis入门基础(一)
一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记 ...
- MyBatis入门案例、增删改查
一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...
随机推荐
- Mysql C语言API编程入门讲解
原文:Mysql C语言API编程入门讲解 软件开发中我们经常要访问数据库,存取数据,之前已经有网友提出让鸡啄米讲讲数据库编程的知识,本文就详细讲解如何使用Mysql的C语言API进行数据库编程. ...
- 分布式消息系统kafka
kafka:一个分布式消息系统 1.背景 最近因为工作需要,调研了追求高吞吐的轻量级消息系统Kafka,打算替换掉线上运行的ActiveMQ,主要是因为明年的预算日流量有十亿,而ActiveMQ的分布 ...
- Linux的文件夹配置
学习linux我个人认为首先须要了解清楚在系统中没给目录的详细事干什么的才行,这样在以后的学习其中以及在使用linux系统的过程中才会事半功倍. /bin 主要内容是系统的运行文件,可是/bin中的运 ...
- STM32W芯片的JTAG口用于GPIO
使用过程中发现STM32W芯片在驱动液晶SPI液晶时,在调试状态下可以正常工作但在通常运行情况下却没有任何显示! 经查发现我使用的两个端口PC0和PC3的电平很不正常,拉不高. 所以我就怀疑到IO口问 ...
- 使用Windows2003创建FTP服务器 - 进阶者系列 - 学习者系列文章
现在有不少的FTP建设软件,比如Server-U软件.不过本文只介绍使用Windows2003来创建FTP服务器. 1. 打开控制面板的添加删除程序. 2. 打开 添加删除Windows组件 3. ...
- VMWare 11安装操作系统 - 初学者系列 - 学习者系列文章
在2010年的时候,我写过一篇关于VMWare的安装操作系统的博文.但是今天在QQ群里有人问起VMWare安装操作系统的问题,虽然回答了,但是回头看了下当时那篇博文,决定重新写一文. 首先要获取VMW ...
- 我的Android 4 学习系列之创建应用程序和Activity:Manifest、Application、Activity
目录 介绍Android应用程序组件,以及使用这些组件构建的各种Android应用程序 Android应用程序的生命周期 如何创建应用程序Manifest 如何使用外部资源提供对位置.语言和硬件配置的 ...
- QTP使用技巧
1QTP基本功能的使用 QTP的基本功能包括两大部分:一部分是提供给初级用户使用的关键字视图:另一部分是提供给熟悉VBScript脚本编写的自动化测试工程师使用的专家视图.但是,并没有严格的区分,在实 ...
- openGL的使用步骤
使用openGL步骤:1.创建GLSurfaceView对象2.创建GLSurfaceView.renderer实现类.3.设置activity的contentView,以及设置view的render ...
- 一个ERP系统的磕磕碰碰
历时5个月的开发,终于可以交付使用了.在这期间系统从需求分析.系统架构设计.开发.测试.运行.迭代.交付,整个忐忑波荡的一路走来,终于有时间静下心来写一篇总结跟各位博友一起探讨.学习了.如果对大家有帮 ...