根据 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();
}
}
源代码下载:实例源码