Java框架学习_Mybatis(二)(查)根据id查询用户信息、抽取工具类,根据用户名模糊查询

源代码:MybatisDemo增删改查


1、Mybatis根据id查询用户信息:
前面已经配置过了,现在来做一个测试类

  1. 修改一下user.xml
<?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">

<!-- 命名空间,用于隔离sql语句,后续会有重要作用 -->
<mapper namespace="user">


<!-- 
id:sql语句的唯一标识
parameterType:入参的数据类型
resultType:返回结果的数据类型
#{}:占位符,相当于?,里面的东西随便写
${value}:基本数据类型必须是value
 -->

<select id="getUserById" parameterType="int" resultType="cn.nupt.pojo.User">

	select * from user where id = #{id2}
	<!--或者: select * from user where id = ${value} -->

</select>

</mapper>

然后在src下面建一个测试包测试类,这里用junit做单元测试

package cn.nupt.mybatis.test;

import java.io.IOException;
import java.io.InputStream;

import javax.jws.soap.SOAPBinding.Use;

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 cn.nupt.pojo.User;

public class MybatisTest {
	@Test
	public void testMybatis() throws IOException {

		// 创建SqlSessionFactoryBuilder对象
		SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
		// 创建核心配置文件的输入流
		InputStream stream = Resources.getResourceAsStream("SqlMapConfig.xml");
		// 通过输入流创建SqlSessionFactory对象
		SqlSessionFactory sqlSessionFactory = ssfb.build(stream);
		// 创建SqlSession对象
		SqlSession session = sqlSessionFactory.openSession();
		// 执行查询,第一个参数就是user.xml里面sql语句的id,最好加上user前缀,第二个参数就是占位符里面的数了
		//这里就相当于了 select * from user where id = 1
		User user = session.selectOne("user.getUserById", 1);

		System.out.println(user);

		session.close();

	}
	
	

}

输出:User [id=1, username=王五, sex=2, birthday=null, address=null]

2、抽取工具类,根据用户名模糊查询:

就像之前抽取JDBC语句一样,在这里也来把通用的步骤抽取一下,主要是抽取SqlSessionFactory对象

新建Utils包,然后创建SqlSessionFactoryUtils:

package cn.nupt.mybatis.utils;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SqlSessionFactoryUtils {
	//静态创建
	private static SqlSessionFactory sqlSessionFactory;
	//静态代码块,只初始化一次
	static {
		SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
		InputStream stream;
		try {
			stream = Resources.getResourceAsStream("SqlMapConfig.xml");
			sqlSessionFactory = ssfb.build(stream);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//增加一个get方法
	public SqlSessionFactory getSqlSessionFactory() {
		return sqlSessionFactory;
	}

}

为什么只抽取到sqlSessionFactory,不抽取到sqlSession?

Mybatis文档里面是这么说的:Mybatis文档(中英)

在这里插入图片描述

大概意思就是说每个线程都应该只拥有自己的sqlSession实例,因为sqlSession是线程不安全的,所以它最好作用在请求域或者方法域里面,不要将sqlSession的引用放在静态域里面(就是static修饰的),甚至于不要放在类的方法属性里面…最好还需要在一个方法块(就是{ })里面把sqlSession关掉


然后我们继续在user.xml里面添加sql语句:

<?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">

<!-- 命名空间,用于隔离sql语句,后续会有重要作用 -->
<mapper namespace="user">


<!-- 
id:sql语句的唯一标识
parameterType:入参的数据类型
resultType:返回结果的数据类型
#{}:占位符,相当于?,里面的东西随便写
${value}:普通数据类型必须是value
 -->

<select id="getUserById" parameterType="int" resultType="cn.nupt.pojo.User">

	<!-- select * from user where id = #{id2} -->
	<!-- 或者: --> select * from user where id = ${value}

</select>


<select id="getUserByName" parameterType="string" resultType="cn.nupt.pojo.User">

	
	<!-- select * from user where name like '%张%' -->
	<!-- 和下面的一样都可以,只不过输入完整的:“%张%”
	select * from user where username like #{id2} -->
	select * from user where username like '%${value}%'

</select>

</mapper>

然后用已经抽取的工具类在测试方法里面输入:

package cn.nupt.mybatis.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import javax.jws.soap.SOAPBinding.Use;

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 cn.nupt.mybatis.utils.SqlSessionFactoryUtils;
import cn.nupt.pojo.User;

public class MybatisTest {
	@Test
	public void testMybatis() throws IOException {

		SqlSessionFactory sessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
		SqlSession session = sessionFactory.openSession();

		List<User> list = session.selectList("user.getUserByName", "张");
		for (User user : list) {
			System.out.println(user);
		}
		session.close();

	}

}

猜你喜欢

转载自blog.csdn.net/weixin_39782583/article/details/85806308
今日推荐