Mybatis 学习笔记之 查询(一)

根据 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

  1. namespace: 命名空间,作用就是对 sql 进行分类化管理,理解 sql 隔离 。  注意:使用 mapper 代理方法开发,namespace 有特殊重要作用。(后续讲)
  2. 在映射文件中配置很多 sql 语句。
  3. 需求:通过 id 查询用户表记录。通过 select 执行数据库查询。
  4. id:标识映射文件中的 sql ,将 sql 封装到底层 mappedStatement 封装对象中,所以 id 称为 statement 的 id。
  5. #{ }: 表示一个占位符号。
  6. #{id}:其中的 id 表示接受输入的参数,参数名称就是 id 。如果输入参数是简单类型,#{ } 中的参数名可以任意,可以是 value 或者其他名称。
  7. parameterType:指定输入参数类型,这里指定 int 型。
  8. 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 模糊查询用户

扫描二维码关注公众号,回复: 467003 查看本文章

 UserMapper.xml


根据用户名称模糊查询用户信息,可能返回多条。

<select id="findUserByName"  parameterType="java.lang.String"  resultType="com.po.User">
select * from user where name like '%${value}%'
</select>

  1. resultType: 指定单条记录所映射的 Java 对象类型,不管返回是否多条。
  2. ${}:表示拼接 sql ,将接收到的参数内容 不加修饰 拼接在 sql 中。
  3. 使用 ${} 拼接容易引起 sql 注入。但是 可以和 Order by 结合使用:ORDER BY ${User.sex}
  4. ${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();
		}
		
		
	}


猜你喜欢

转载自blog.csdn.net/qq_30715329/article/details/79884698