mybatis学习 九 代理开发
Posted 阿瞒123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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学习 九 代理开发的主要内容,如果未能解决你的问题,请参考以下文章
Spring+SpringMVC+MyBatis深入学习及搭建——MyBatis原始Dao开发和mapper代理开发(转发同上)
Mybatis学习---MyBatis知识原始Dao开发和mapper代理开发