一.开发规范

1.映射文件中的namespase等于mapper接口类路径

2.statement的id与mapper中的方法名一致

3.让mapper的接口方法输入参数类型与statement中的parameterType指定的参数类型一致

4.让mapper的接口方法返回值类型和statement的resultType指定参数类型一致

SqlMapConfig.xml(名字没有规定)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="123" />
</dataSource>
</environment>
</environments>
<!-- 加载mapper.xml -->
<mappers>
<!-- 指定classpath下的文件 -->
<mapper resource="sqlmap/User.xml"/>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
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">
<!--
一个mapper映射文件是以sql语句为单位进行配置,最终将sql语句封装到MappedStatement对象中
namespace命名空间作用是更好对sql语句进行隔离,方便管理sql 注意:后期讲mybatis的mapper代理开发方式时namespace有特殊的作用,如下:
namespace等于mapper接口类路径,这样实现通过映射文件找到对应的mapper接口是哪个
-->
<mapper namespace="cn.itcast.mybatis.mapper.UserMapper"> <!-- 根据用户id查询一个用户信息
select:用于查询,主要配置sql语句、输入参数类型、输出结果类型
最终该 select 标签 中所配置的内容会封装到MappedStatement对象,可以将该 select称为是一个Statement
id:唯 一标识 namespace下的一个sql语句,将id称为Statement的id parameterType:指定输入参数的类型(简单类型、自定义pojo)
#{}:表示一个占位符号,占位符号可以防止sql注入
#{value}:value表示接收输入参数的值,如果接收的输入参数是简单类型,#{}里边可以写value或其它的名称
resultType:将sql查询结果集映射成java对象
将多个列的值映射到一个对象中,需要定义的pojo,resultType映射规则是sql查询列名和pojo的属性名必须一致方可完成映射
resultType 指定单条记录所映射的java对象 -->
<select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
SELECT id,username,birthday,sex,address FROM USER WHERE id = #{id}
</select>
<!--
根据用户名称模糊查询用户信息列表
resultType:不管结果集记录的数量有多少,resutType指定单条记录所映射的java对象
resultType映射规则是sql查询列名和pojo的属性名必须一致方可完成映射
${}:表示一个sql拼接符号,相当于字符串的拼接:
“SELECT * FROM USER WHERE username LIKE '%” + ${}表示的串 + “%'”
${}:如果接收输入参数是一个简单类型,${} 中只能写value
${}实现sql拼接是无法防止sql注入的。
-->
<select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">
SELECT * FROM USER WHERE username LIKE '%${value}%'
</select> <!-- 添加用户
需要输入参数是多个值,如果传入简单类型是无法满足要求。
输入参数类型可以定义为pojo(cn.itcast.mybatis.po.User包括多个属性)
#{}如何获取对象的值?
#{}是通过OGNL读取对象的值,OGNL的表达式方式:属性.属性.属性。。。。直到把对象中的属性值读取过来 过止
mysql数据库通过select LAST_INSERT_ID();获取自增主键的值,在insert语句执行之后去执行LAST_INSERT_ID()获取新记录的主键
-->
<insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">
<!--
keyProperty:将主键值设置到输入参数的哪个属性,设置到user的id属性中
order:selectkey中的sql语句在insert语句执行的前或后,这里要设置成"AFTER"
resultType:select LAST_INSERT_ID()查询出的值
-->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
select LAST_INSERT_ID()
</selectKey>
insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address});
</insert> <!-- 使用mysql的uuid生成主键 -->
<!-- <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User"> keyProperty:将主键值设置到输入参数的哪个属性,设置到user的id属性中
order:select uuid()在insert执行之前去执行得到uuid作为主键,将主键值设置到user的属性中
resultType:select uuid()查询出的值 <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
select uuid()
</selectKey>

insert into user(id,username,birthday,sex,address) values(#{id},#{username},#{birthday},#{sex},#{address});
</insert> --> <!-- 修改用户-->
<update id="updateUser" parameterType="cn.itcast.mybatis.po.User">
update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
</update> <!-- 删除用户 -->
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete> </mapper>
UserMapper接口
package cn.mybatis.mapper; import java.util.List; import cn.mybatis.po.User; public interface UserMapper {
//根据用户id查询用户信息
public User findUserById(int id);
//根据用户名模糊查询
public List<User> findUserByName(String username); public void insertUser(User user);
public void updateUser(User user);
public void deleteUser(User user);
}

//sqlSessionFactory以单例方式,可以在全局.   sqlSession是线程不安全的,面向程序员的接口,当放在多线程容易造成数据冲突,适合在方法体内作为局部变量.

测试类
public class UserMapperTest { private SqlSessionFactory sqlSessionFactory; // @Before注解标识 的方法在测试方法执行之前去执行
@Before
public void setUp() throws Exception {
// 创建sqlSessionFactory,单例方式.
// mybatis全局配置文件
String resource = "SqlMapConfig.xml";
// 根据mybatis的全局配置文件构造 一个流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testFindUserById() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession();
//生成代理对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用mapper
User user = mapper.findUserById(1);
System.out.println(user);
sqlSession.close();
}
@Test
public void testFindUserByName() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession();
//生成代理对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用mapper
List<User> list = mapper.findUserByName("张");
System.out.println(list); sqlSession.close();
}
@Test
public void testInsertUser() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession();
//生成代理对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//构造 输入参数,就是插入的用户信息
User user = new User();
user.setUsername("赵六");
user.setBirthday(new Date());
user.setAddress("北京");
//调用mapper
mapper.insertUser(user);
sqlSession.commit();
sqlSession.close();
}
@Test//修改
public void testUpdateUser(){
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setId(1);
user.setUsername("田桑");
user.setAddress("西安");
mapper.updateUser(user);
sqlSession.commit();
sqlSession.close();
}
@Test//删除
public void testdeleteUser(){
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setId(22); mapper.deleteUser(user);
sqlSession.commit();
sqlSession.close();
}
}

Mybatis的mapper代理开发方法的更多相关文章

  1. Mybatis的mapper代理开发dao方法

    看完了之前的mybatis原始的dao开发方法是不是觉得有点笨重,甚至说没有发挥mybatis 作为一个框架的优势.总结了一下,原始的dao方法有以下几点不足之处 dao接口实现方法中存在大量的模板方 ...

  2. java-mybaits-00203-DAO-mapper代理开发方法,多参数【推荐】

    程序员只需要mapper接口(相当 于dao接口) 不需要写具体实现类,mapper已经代理完成,mybatis才有的 一.mapper代理开发方法(建议使用)          程序员在编写mapp ...

  3. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...

  4. Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6869133.html 前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)——My ...

  5. 【mybatis深度历险系列】深入浅出mybatis中原始dao的开发和mapper代理开发

    使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法.mybatis在进行dao开发的时候,涉及到三姐妹,分别是SqlSessionFactoryBuilder ...

  6. Mybatis学习总结(二)——Mapper代理开发

    一.概要 1.原始DAO开发中存在的问题:(1)DAO实现方法体中存在很多过程性代码.(2)调用SqlSession的方法(select/insert/update)需要指定Statement的id, ...

  7. mybatis 学习笔记(三):mapper 代理开发 dao 层

    mybatis 学习笔记(三):mapper 代理开发 dao 层 优势 通过使用mapper 代理,我们可以不需要去编写具体的实现类(使用 getMapper() 方法自动生成),只需编写接口即可, ...

  8. 【转】Mybatis学习---MyBatis知识、原始Dao开发和mapper代理开发

    [原文]https://www.toutiao.com/i6594610137560777223/ 一.什么是MyBatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及 ...

  9. Mybatis 和Spring整合之mapper代理开发

    F:\1ziliao\mybatis\代码 1.1 SqlMapConfig.xml <?xml version="1.0" encoding="UTF-8&quo ...

随机推荐

  1. linq——常用方法

    take  前几 skip   跳过前几 takeWhile   var firstNumbersLessThan6 = numbers.TakeWhile(n => n < 6);  / ...

  2. IDEA创建一个Spring MVC 框架Java Web项目,Gradle构建

    注:此篇有些细节没写出,此文主要写重要的环节和需要注意的地方,轻喷 新建项目 选择Gradle , 勾选java 和 web.之后就是设定项目路径和名称,这里就不啰嗦了. build.gradle文件 ...

  3. JqueryEasyUI EasyLoader

    EasyLoader(简单加载) 对象的属性和方法: 使用: <script src="~/jquery-easyui-1.5.2/jquery.min.js">< ...

  4. MongoDB 学习(二)可视化界面

    一.安装可视化界面 1.mongobooster 安装和配置 1.下载安装 下载地址:https://nosqlbooster.com/downloads 下载完成后直接点击安装: 安装完成弹出界面: ...

  5. dubbo配置清单-超详细版

    服务发布者 在服务发布者的springboot主配置文件application.properties中添加dubbo配置 #dubbo服务名 spring.dubbo.application.name ...

  6. 最近使用日期控件时,用到了My97DatePicker控件,单日期控件,记录一下

    以上是使用时的效果,可以自己设定日期有效区间,如下图: 对于起始日期和终止日期的控制如下: <td> <label >起始日期:</label> <input ...

  7. 从MySQL到ORM(一):Centos7.x安装Mysql5.7

    一.下载安装mysql 1.进入官网获取RPM包:https://dev.mysql.com/downloads/repo/yum/ 2.复制链接地址进行下载: wget https://dev.my ...

  8. 鼠标拖动改变DIV等网页元素的大小的最佳实践

    1.初次实现 1.1 html代码 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" la ...

  9. 一、linux下安装redis(单机)

    1.下载redis,http://download.redis.io/releases/redis-3.2.7.tar.gz 2.linux我用的是centos6.5 3.把redis上传到cento ...

  10. Python中的一些特殊函数

    阅读目录 1. 过滤函数filter 2. 映射和归并函数map/reduce 3. 装饰器@(有参数和无参数) 4. 匿名函数lamda 回到顶部 1. 过滤函数filter 定义:filter 函 ...