mybatis学习 九 代理开发
1.作用:
实现创建一个接口后把mapper.xml由mybatis生成接口的实现类,通过调用接口对象就可以获取 mapper.xml 中编写的 sql.
2.实现步骤:
2.1 创建一个接口
(1) 为了xxxMapper.xml文件与xxxMapper.java文件进行绑定,接口包名和接口名必须 xxxMapper.xml 中<mapper>标签namespace属性值相同,还要求xxxMapper.xml 与xxxMapper.java文件要在同一个包下
(2)接口中方法名和 xxxMapper.xml中select,insert,update 标签的 id 属性值相同
(3)接口中的方法的参数与 xxxMapper.xml中select,insert,update标签的resultType属性值一致
(4)接口中函数的返回值与 xxxMapper.xml中select,insert,update标签的parameterType属性值一致
2.2 在 mybatis的全局配置文件中,在<mappers>标签中,不在使用<mapper>标签,使用<package>进 行扫描接口和 mapper.xml
代码
全局配置文件中配置<mappers>
<?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>
<!--
配置log4j
-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<package name="com.xxx.pojo"/>
</typeAliases> <!-- default的值是<environment>的id,代表当前要连接的数据库环境
【注】default的值一定要是一个<environment>,否则在获取SqlSession实例时会报空指针错误
-->
<environments default="mySqlJdbc">
<environment id="mySqlJdbc">
<!-- 事物标签,使用原生jdbc的事物 ,如果是MANAGERD表示交给其他容器管理-->
<transactionManager type="JDBC"></transactionManager>
<!-- 数据库连接池技术 -->
<dataSource type="POOLED">
<!-- property中的name的值,不能随便写,有规定的 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.153.128:3306/mybaties?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
<environment id="oracleJdbc">
<transactionManager type=""></transactionManager>
<dataSource type=""></dataSource>
</environment>
</environments> <!-- 加载XXXMapper.xml
如果采用代理开发,package批量指定xxxMapper.xml文件已经xxxMapper.java文件
-->
<mappers>
<!-- <mapper resource="com/xxx/mapper/AccountMapper.xml"/>
<mapper resource="com/xxx/mapper/LogMapper.xml"/> -->
<package name="com.xxx.mapper"/>
</mappers>
</configuration>
xxxMapper.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 namespace="com.xxx.mapper.AccountMapper">
<select id="selByAccnoPwd" resultType="account" parameterType="account">
select * from account where accno=#{accNo} and password=#{password}
</select> <select id="selByAccnoName" resultType="account" parameterType="account">
select * from account where accno=#{accNo} and name=#{name}
</select> <update id="updateBalanceByAccno" parameterType="account">
update account set balance=balance+#{balance} where accno=#{accNo}
</update> </mapper>
测试代码
public static void main(String[] args) throws IOException {
InputStream in = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
SqlSession session = sqlSessionFactory.openSession();
//通过代理获取实现xxxMapper.java接口的实现类
AccountMapper mapper=session.getMapper(AccountMapper.class);
Account account=new Account();
account.setAccNo("01");
account.setPassword(1234);
Account account2 = mapper.selByAccnoPwd(account);
System.out.println(account2);
}
多参数
<!-- 当有多个参数时,不要写parameterType
如果接口中方法的参数是基本数据类型或者String类型,
第一个参数在占位符中用0或者param1,
第二个参数在占位符中用1或者param2 如果非要使用接口中参数的名称,可以在接口的方法中,加@Param("accin"),@Param("accout")注解
Account selByMutilParams(@Param("accNo") String accNo,@Param("name") String name);
其实在mybatis中,只要加@Param("")注解,实现原理就变成了使用Map,本质是使用Map -->
<select id="selByMutilParams" resultType="account">
select * from account where accno=#{0} and name=#{1}
</select>
mybatis学习 九 代理开发的更多相关文章
- Mybatis的mapper代理开发dao方法
看完了之前的mybatis原始的dao开发方法是不是觉得有点笨重,甚至说没有发挥mybatis 作为一个框架的优势.总结了一下,原始的dao方法有以下几点不足之处 dao接口实现方法中存在大量的模板方 ...
- Mybatis的mapper代理开发方法
一.开发规范 1.映射文件中的namespase等于mapper接口类路径 2.statement的id与mapper中的方法名一致 3.让mapper的接口方法输入参数类型与statement中的p ...
- MyBatis - Mapper动态代理开发
Mapper接口开发方法编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象. Mapper接口开发方式是基于入门程序的基础上,对 控制程序 进行分层开发, ...
- mybatis学习——使用注解开发
前言: 一个语句既可以通过 XML 定义,也可以通过注解定义.不过,由于 Java 注解的一些限制以及某些 MyBatis 映射的复杂性,要使用大多数高级映射(比如:嵌套联合映射),仍然需要使用 XM ...
- Mybatis学习笔记-注解开发
面向接口编程 根本原因:[解耦],[可拓展],[更高规范性] 接口类型: abstract class interface 使用注解开发 简单语句可用注解开发(直接查询,列名与属性名相同) 本质:反射 ...
- Mybatis学习记录(六)--开发中的小问题
近期開始做项目,期间遇到一些小问题,开此贴记录一下 1.关于order by 今天写一个sql查询语句,用了order by可是一直没效果,后来才发现用了#{}取值,mybatis使用这个的话对于St ...
- Singer 学习九 运行&&开发taps、targets (四 开发target)
singer 的target 需要从stdin 的行数据,同时处理schema.record.state 消息 指南 schema 需要进行关联stream records 数据的校验 一旦Targe ...
- MyBatis 动态代理开发
MyBatis 动态代理开发 § Mapper.xml文件中的namespace与mapper接口的类路径相同. § Mapper接口方法名和Mapper.xml中定义的每个statement的i ...
- JavaWeb_(Mybatis框架)Mapper动态代理开发_三
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...
随机推荐
- IDEA中配置Maven+spring MVC+tomcat
一:配置Maven安装教程如下: http://blog.csdn.net/qq_32588349/article/details/51461182 实际安装过程中,如果按照教程配置如下属性,最后创建 ...
- python--第七天总结
引言 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” [面向对象编程(Obj ...
- java学习笔记整理
java知识模块:1.基础知识,数组,字符串,正则表达式:2.类和对象,接口,继承,多态,抽象类,内部类,泛型,java常用类库.3.异常处理: 4.IO: 5.事件处理: 6.多线程: 7 ...
- Websocket实现群聊、单聊
Websocket 使用的第三方模块:gevent-websocket 群聊 ws群聊.py中的内容 from flask import Flask, request, render_template ...
- 165. Compare Version Numbers (String)
Compare two version numbers version1 and version2. If version1 > version2 return 1, if version1 & ...
- AngularJs中url参数的获取
前言: angular获取通过链接形式访问的页面,要获取url中的参数,就不能通过路由的方式传递获取了,使用原生js或者jquery,又显得比较麻烦,好在angular已经封装了获取url参数的方法, ...
- echarts中国地图散点涟漪效果
echarts中国地图例子:http://gallery.echartsjs.com/editor.html?c=effectScatter-map 代码: var data = [{ name: ' ...
- java_5.1 for循环
1.求1-100的和 public static void main(String[] args) { int sum = 0; for (int i = 0; i <= 100 ; i++) ...
- 【APT】SqlServer游标使用
use [ElephantCredit] go begin transaction tran_bank; print '**脚本开始执行!'; declare @tran_error int , @n ...
- Vue-CLI3.x 高版本覆盖低版本Vue-CLI2.x 解决方法
因为Vue-cli 3 和旧版使用了相同的vue命令,所以Vue CLI 2(vue-cli) 被覆盖了.如果你任然需要旧版本的 vue init 功能 ,你可以全局安装一个交接工具: npm ins ...