<parameterType >
参数类型,用于参数传递的查询
mapper.xml:
<!--parameterType 参数类型,用于参数传递的查询--> <select id="selUseObject" resultType="User" parameterType="User"> <!--如果参数是对象可以使用#{属性名来获取}--> select * from tb_user where username = #{username} and password = #{password} </select>
完整代码
<?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"> <!-- namespace: 命名空间, 可以随意定义, 一般情况下要写全限定路径 MyBatis管理SQL语句是通过namespace+id来定位的 --> <mapper namespace="com.lin.mapper.UserMapper"> <!-- select标签用于编写查询语句 id: sql语句的唯一标识, 类比为方法名 resultType: 用于设定返回结果的类型(全限定路径) 如果返回结果是集合, 要写集合泛型的类型 --> <!-- parameterType, 参数类型, 用于参数的传递 --> <select id="selById" resultType="user" parameterType="int"> <!-- #{}用于使用参数 可以用 index, 索引, 从0开始 也可以用 param+数字, param1, param2 select * from tb_user where id=#{param1} --> select * from tb_user where id = #{0} </select> <!--parameterType 参数类型,用于参数传递的查询--> <select id="selUseObject" resultType="User" parameterType="User"> <!--如果参数是对象可以使用#{属性名来获取}--> select * from tb_user where username = #{username} and password = #{password} </select> <select id="selUseMap" resultType="User" parameterType="map"> <!--如果是Map集合,通过#{key}来获取--> select * from tb_user where username = #{username} and password = #{password} </select> </mapper>
可以从上面看出,参数的传递可以是int类型,也可以是对象,或者是Map集合
为什么会有这样的情况出现呢,主要还是受限于session.selectOne只能传递两个参数
参数1:mapper的命名空间.id
参数2:传递进来的查询条件
参数的获取用#{ }来获取
(ps 第一种int类型的查询语句#{ }内写什么都行,但是为了规范,一般写0)
查询操作代码
package com.lin.test; import com.lin.pojo.User; 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.Test; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; public class TestMyBatisSelect { @Test public void testSelectById() throws IOException { //加载资源 InputStream is = Resources.getResourceAsStream("mybatis.xml"); //获取工厂对象 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); //获取session 对象 SqlSession session = factory.openSession(); /*如果需要传多个参数的话就封装成对象传入*/ User user = session.selectOne("com.lin.mapper.UserMapper.selById", 2); System.out.println(user); //关闭资源 session.close(); } @Test public void selectByUserNameAndPassWord() { SqlSession session = null; try { session = new SqlSessionFactoryBuilder() .build(Resources.getResourceAsStream("mybatis.xml")) .openSession(); User u = new User(); u.setUsername("zhangsan"); u.setPassword("123"); User user = session.selectOne("com.lin.mapper.UserMapper.selUseObject", u); System.out.println(user); } catch (IOException e) { e.printStackTrace(); } } @Test public void selectUseMap() { SqlSession session = null; try { session = new SqlSessionFactoryBuilder() .build(Resources.getResourceAsStream("mybatis.xml")) .openSession(); //出了封装对象还可以使用map集合 Map<String, String> map = new HashMap<>(); map.put("username","lisi"); map.put("password","123"); User user = session.selectOne("com.lin.mapper.UserMapper.selUseMap", map); System.out.println(user); } catch (IOException e) { e.printStackTrace(); } } }
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
接口绑定程序员可以提供一个接口,然后提供一个对应一个mapper.xml文件,mybatis会自动将接口和xml文件绑定,实际上mybatis会根据接口和对应的xml文件创建接口的实现类,可以得到接口的对象,方便方法的调用(动态代理模式)注意点:1.配置文件的名字必须和接口的名字保持一致2.mapper.xml文件中的命名空间要写成接口的全限定路径(包名+接口名)3.标签中的id要和接口中的方法名
示例一般mybatis文件都是存放在src根目录下以mybatis.xml命名配置详情mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
selectList用于查询多条数据的情况,返回值是一个list集合.如果没有查到任何数据,返回没有元素的集合(空集合,不是null)publicvoidtestSelectList()throwsIOException{//加载资源配置文件InputStreamis=Resources.getResourceAsStream("mybatis.xml");//创建工厂对象SqlSessionFa
除了导包外还要有配置文件一般用log4j.properties命名存放在src目录下一般是向上的,比如设置error级别就会显示包含error及以上的日志信息#设置log4j的根(整体)日志级别,同时指定日志输出的位置:CONSOLE表示控制台,LOGFILE表示日志文件log4j.rootCategory=ERROR,CONSOLE#如果需要打印到文件就解开下面一行的代码注释即可#log4j.r
mybatis也支持Properties这个标签位于mybatis.xml的配置文件主要作用是用于加载外部的properties文件用法:在src下新建db.properties文件jdbc.driver=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=U
事务是操作数据库的最小单元,应该保证一个事物中的sql语句要么同时成功,要么同时不成功mybatis中配置了事务管理器,type属性设置为JDBC.表示mybatis采用和原生JDBC相同的事务管理机制一般mybatis会关闭自动提交,所以在执行DML操作时需要手动提交这里就涉及到事务管理(ACID)谈到事务一般都是以下四点原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中
这是一组标签,功能类似于switch...case..用这个标签就要注意了,因为where永远后面只有一个子句,也就是只有一个查询条件mybatis.org//DTDMapper3.0//EN""http://mybatis.o
Trimprefix:前缀,表示向前面添加内容prefixOverrides:从前面删除内容suffix:后缀,表示向后面添加内容suffixOverrides:从后面删除内容先对灵活,实际开发中用于解决where和set做不到的操作的时候使用Bind常用在模糊查询上两个标签name:要用于模糊查询的关键字value:写法"'%'+用于模糊查询的关键字+'%'"使用后后面的查询条件不再使用等号,而
set子句.有如下功能:a)如果有条件满足,会添加set关键字并执行sql语句b)如果第一个条件中有逗号,但后续的条件没有满足的,会自动去尾部逗号。c)如果修改条件都不满足就不生产set语句,出现错误,可以使用在set中添加id=#{id}来避免错误updatetb_user 添加我为好友,拉您入交流群! 请使用微信扫一扫!
添加我为好友,拉您入交流群!
请使用微信扫一扫!