千金一刻莫空度,老大无成空自伤。这篇文章主要讲述java-mybaits-00203-DAO-mapper代理开发方法,多参数推荐相关的知识,希望能为你提供帮助。
程序员只需要mapper接口(相当 于dao接口)
不需要写具体实现类,mapper已经代理完成,mybatis才有的
一、mapper代理开发方法(建议使用)
程序员在编写mapper.xml(映射文件)和mapper.java需要遵循一个开发规范:
1、mapper.xml中namespace就是mapper.java的类全路径。
2、mapper.xml中statement的id和mapper.java中方法名一致。
3、mapper.xml中statement的parameterType指定输入参数的类型和mapper.java的方法输入 参数类型一致。
4、mapper.xml中statement的resultType指定输出结果的类型和mapper.java的方法返回值类型一致。二、实现原理Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。
总结:
以上开发规范主要是对下边的代码进行统一生成:
User user = sqlSession.selectOne("test.findUserById", id);
sqlSession.insert("test.insertUser", user);
三、开发方法实现
代码地址:https://github.com/bjlhx15/mybatis
1.Mapper.xml(映射文件)定义mapper映射文件UserMapper.xml,需要修改namespace的值为 UserMapper接口路径。将UserMapper.xml放在classpath 下mapper目录 下。
文章图片
文章图片
< ?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 namespace="com.lhx.mybatis.mapperproxy.UserMapper"> < !-- 根据id获取用户信息 --> < select id="findUserById" parameterType="int" resultType="com.lhx.mybatis.po.User"> select * from user where id = #{id} < /select> < !-- 自定义条件查询用户列表 --> < select id="findUserByUsername" parameterType="java.lang.String" resultType="com.lhx.mybatis.po.User"> select * from user where username like ‘%${value}%‘ < /select> < !-- 添加用户 --> < insert id="insertUser" parameterType="com.lhx.mybatis.po.User"> < 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> < !-- 根据id获取用户信息 --> < select id="findUserByIdAndSex" resultType="com.lhx.mybatis.po.User"> select * from user where id = #{0} and sex = #{1} < /select> < /mapper>
View Code 2.Mapper.java(接口文件)
文章图片
文章图片
package com.lhx.mybatis.mapperproxy; import java.util.List; import com.lhx.mybatis.po.User; /** * 用户管理mapper */ public interface UserMapper { // 根据用户id查询用户信息 public User findUserById(int id) throws Exception; // 查询用户列表 public List< User> findUserByUsername(String username) throws Exception; // 添加用户信息 public void insertUser(User user) throws Exception; public User findUserByIdAndSex(int id,int sex) throws Exception; }
View Code 接口定义有如下特点:
- Mapper接口方法名和Mapper.xml中定义的statement的id相同
- Mapper接口方法的输入参数类型和mapper.xml中定义的statement的parameterType的类型相同
- Mapper接口方法的输出参数类型和mapper.xml中定义的statement的resultType的类型相同
文章图片
文章图片
< ?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="https://www.songbingjia.com/android/com.mysql.jdbc.Driver" /> < property name="url" value="https://www.songbingjia.com/android/jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" /> < property name="username" value="https://www.songbingjia.com/android/root" /> < property name="password" value="https://www.songbingjia.com/android/root" /> < /dataSource> < /environment> < /environments> < mappers> < mapper resource="mapper/UserMapper.xml" /> < /mappers> < /configuration>
View Code 四、测试
文章图片
文章图片
package com.lhx.mybatis.mapperproxy; import java.io.InputStream; import java.util.Date; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Before; import org.junit.Test; import com.lhx.mybatis.po.User; import junit.framework.TestCase; public class UserMapperTest extends TestCase {private SqlSessionFactory sqlSessionFactory; protected void setUp() throws Exception { // mybatis配置文件 String resource = "SqlMapConfig-MapperProxy.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); // 使用SqlSessionFactoryBuilder创建sessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); }public void testFindUserById() throws Exception { // 获取session SqlSession session = sqlSessionFactory.openSession(); // 获取mapper接口的代理对象 UserMapper userMapper = session.getMapper(UserMapper.class); // 调用代理对象方法 User user = userMapper.findUserById(1); System.out.println(user); // 关闭session session.close(); }public void testFindUserByUsername() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List< User> list = userMapper.findUserByUsername("张"); System.out.println(list.size()); }public void testInsertUser() throws Exception { // 获取session SqlSession session = sqlSessionFactory.openSession(); // 获取mapper接口的代理对象 UserMapper userMapper = session.getMapper(UserMapper.class); // 要添加的数据 User user = new User(); user.setUsername("张三"); user.setBirthday(new Date()); user.setSex("1"); user.setAddress("北京市"); // 通过mapper接口添加用户 userMapper.insertUser(user); // 提交 session.commit(); // 关闭session session.close(); }public void testFindUserByIdAndSex() throws Exception { // 获取session SqlSession session = sqlSessionFactory.openSession(); // 获取mapper接口的代理对象 UserMapper userMapper = session.getMapper(UserMapper.class); // 调用代理对象方法 User user = userMapper.findUserByIdAndSex(1, 2); System.out.println(user); // 关闭session session.close(); } }
View Code 五、总结
- selectOne和selectList
- namespace
- mapper接口方法参数只能有一个是否影响系统 开发【旧版本】
- 多个参数的支持
在mapper接口中定义
public User findUserByIdAndSex(int id,int sex) throws Exception;
在mapper.xml中使用
< !-- 多个参数,不写入参类型 --> < select id="findUserByIdAndSex" resultType="com.lhx.mybatis.po.User"> select * from user where id = #{0} and sex = #{1} < /select>
第二种、注解参数
在mapper接口中定义
public User findUserByIdAndSex2(@Param("id") int id, @Param("sex") int sex) throws Exception;
在mapper.xml中使用
< select id="findUserByIdAndSex2" resultType="com.lhx.mybatis.po.User"> select * from user where id = #{id} and sex = #{sex} < /select>
第三种、map
【java-mybaits-00203-DAO-mapper代理开发方法,多参数推荐】第四种、po类
- mapper接口和mapper.xml不支持方法的重载
推荐阅读
- 屌爆的xamarin,一人单挑google/apple/windows
- c#学习笔记之Application.DoEvents应用
- 十九. 想高速开发app,须要找外包吗()
- android脱壳之DexExtractor原理分析
- 如何使用Rancher设置Kubernetes集群(操作分步指南)
- Apache Storm与Spark比较(它们有哪些区别())
- 如何使用Kubernetes部署执行滚动更新(分步指南)
- 如何创建Spark DataFrame(分步操作详细指南)
- Kubernetes集群管理( 如何使用Rancher BMC集成())