Mybatisi接口绑定 + 参数传递
mybatis和spring整合使用的方案
实现步骤:
1.创建接口
要求:
1.1 接口包名 == mapper.xml的namespace标签 (接口和配置xml文件在同一个包)
1.2 接口方法名 == mapper.xml的id属性 (接口名和配置xml里面的id名一样)
2.mybatis.xml全局配置文件中:
mappers标签里面 -- 使用package标签
举例实现
1. 准备数据库
2. 准备jar包
3. 准备全局mybatis.xml文件
4. 准备实体类 Log
5. 准备mapper包
5.1 准备接口 LogMapper
5.2 准备配置xml文件 LogMapper.xml
6. 准备测试类 test
代码结构层次
实体类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| public class Log { private int id; private String accIn; private String accOut; private double money; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getAccIn() { return accIn; } public void setAccIn(String accIn) { this.accIn = accIn; } public String getAccOut() { return accOut; } public void setAccOut(String accOut) { this.accOut = accOut; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } @Override public String toString() { return "Log [id=" + id + ", accIn=" + accIn + ", accOut=" + accOut + ", money=" + money + "]"; } }
|
全局配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| <?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>
<settings> <setting name="logImpl" value="LOG4J"/> </settings>
<typeAliases> <package name="com.bjsxt.pojo" /> </typeAliases>
<!-- default引用environment的id,当前所使用的环境 --> <environments default="default"> <!-- 声明可以使用的环境 --> <environment id="default"> <!-- 使用原生JDBC事务 --> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/ssm"/> <property name="username" value="root"/> <property name="password" value="njdxrjgc7777777."/> </dataSource> </environment> </environments>
<mappers> <package name="com.bjsxt.mapper"/> </mappers>
</configuration>
|
LogMapper接口
1 2 3 4 5
| public interface LogMapper { List<Log> selAll(); //方法名是selAll List<Log> selByAccInAccount(String accin,String accout); //多参数 }
|
LogMapper.xml配置文件(sql语句)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?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.bjsxt.mapper.LogMapper">
<select id="selAll" resultType="log"> <!-- 方法名和接口方法一致 resultYType使用别名 --> select * from log </select> <select id=" selByAccInAccount" resultType="log"> <!-- 多参数不写parameterType --> select * from log where accin=#{0} and accout=#{1} </select> </mapper>
|
测试代码类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public class Test { public static void main(String[] args) throws IOException { //固定三行 InputStream is = Resources.getResourceAsStream("mybatis.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); SqlSession session = factory.openSession(); // 使用JDK的动态代理设计模式 面向接口的代理设计模式(必须有接口) LogMapper logMapper = session.getMapper(LogMapper.class); //给接口产生实例化 接口 -- 实例化proxy -- 反射到xml文件 List<Log> list = logMapper.selAll(); for(Log log1:list) { System.out.println(log1); } List<Log> list2 = logMapper.selByAccInAccount("1","7"); for(Log log2:list2) { System.out.println(log2); } session.close(); System.out.println("程序执行结束"); } }
|
多参数传递
1 2 3 4 5 6 7 8 9 10 11 12
| 1. 配置文件中写sql语句和id -- (因为id要和接口方法一致) -- 创建接口方法 sql语句中accin 和 accout写法 第一种: #{0} #{1} 调用方法: "1" "7" 第二种: #{param1} #{param2} 调用方法: "1" "7" 第三种(通过map的实现思路) #{accin} #{accout} 调用方法: @param("accin") @param("accout") 2. 然后测试类调用
```
## 总结 ##
|
1. 其实就是我们把配置文件的id(sql语句实现的方法)和接口一样 然后通过接口去实例化proxy代理,然后代理反射到xml文件内实现。
2. 之所以可以实例化是因为我们使用其中一种动态代理设计模式 面向接口
LogMapper logMapper = session.getMapper(LogMapper.class); //方法要接口的类加载器 调用getMapper方法
List<Log> list = logMapper.selAll(); //实例化对象获得结果
```