根据 id 查用户
sqlMapConfig.xml 文件
<?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事务管理,事务控制由mybatis--> <transactionManager type="JDBC" /> <!-- 数据库连接池,由mybatis管理--> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> </configuration>
数据库连接属性,自行对应修改。
UserMapper.xml
- namespace: 命名空间,作用就是对 sql 进行分类化管理,理解 sql 隔离 。 注意:使用 mapper 代理方法开发,namespace 有特殊重要作用。(后续讲)
- 在映射文件中配置很多 sql 语句。
- 需求:通过 id 查询用户表记录。通过 select 执行数据库查询。
- id:标识映射文件中的 sql ,将 sql 封装到底层 mappedStatement 封装对象中,所以 id 称为 statement 的 id。
- #{ }: 表示一个占位符号。
- #{id}:其中的 id 表示接受输入的参数,参数名称就是 id 。如果输入参数是简单类型,#{ } 中的参数名可以任意,可以是 value 或者其他名称。
- parameterType:指定输入参数类型,这里指定 int 型。
- resultType:指定 sql 输出结果 所映射的 Java 对象类型,select 指定的 resultType 表示将单条记录映射到的 Java 对象。
<mapper namespace="test"> <select id="findUserById" parameterType = "int" resultType = "com.po.User"> SELECT * FROM USER WHERE id = #{ id } </select> </mapper>
User 实体类代码省略。
sqlMapConfig.xml 加载映射文件
<mappers> <mapper resource = "sqlmap/User.xml" /> </mappers>
Test类
@Test public void findUserByIdTest(){ String resource = "sqlMapConfig.xml"; InputStream inputStream; SqlSession sqlSession; try { inputStream = Resources.getResourceAsStream(resource); //创建会话工厂,传入 myBatis 配置信息 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); sqlSession = sqlSessionFactory.openSession(); //通过sqlSession 操作数据库 //第一个参数:映射文件中 statement 的 id ,等于 namespace + "." + statement 的 id。 //第二个参数:指定和映射文件中所匹配的parameterType 类型的参数。 //sqlSession.selectOne 的结果是与映射文件中所匹配的 resultType 类型的对象。 User user = sqlSession.selectOne("test.findUserById", 1); System.out.println(user); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { sqlSession.close(); } }
根据 name 模糊查询用户
UserMapper.xml
根据用户名称模糊查询用户信息,可能返回多条。
<select id="findUserByName" parameterType="java.lang.String" resultType="com.po.User"> select * from user where name like '%${value}%' </select>
- resultType: 指定单条记录所映射的 Java 对象类型,不管返回是否多条。
- ${}:表示拼接 sql ,将接收到的参数内容 不加修饰 拼接在 sql 中。
- 使用 ${} 拼接容易引起 sql 注入。但是 可以和 Order by 结合使用:ORDER BY ${User.sex}
- ${value} :接收输入参数内容,如果传入类型是简单类型, ${ } 中只能使用 value。
Test类
@Test public void findUserByNameTest(){ String resource = "sqlMapConfig.xml"; InputStream inputStream; SqlSession sqlSession; try { inputStream = Resources.getResourceAsStream(resource); //创建会话工厂,传入 myBatis 配置信息 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); sqlSession = sqlSessionFactory.openSession(); //通过sqlSession 操作数据库 //第一个参数:映射文件中 statement 的 id ,等于 namespace + "." + statement 的 id。 //第二个参数:指定和映射文件中所匹配的parameterType 类型的参数。 //sqlSession.selectList 的结果是与映射文件中所匹配的 resultType 类型的对象。 List<User> list = sqlSession.selectList("test.findUserByName", "Law"); System.out.println(list); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { sqlSession.close(); } }