<h1><span style="font-size:24px;color:#ff0000;"><strong>一、MybatisUtil获取或者关闭SqlSession对象</strong></span></h1><pre name="code" class="java">public class MybatisUtil {
private MybatisUtil(){}//建立构造方法
private static final String resource="mybatis-config.xml";//配置文件名称用常量标示
private static SqlSessionFactory sqlsf=null;//建立sqlsession工厂
private static ThreadLocal<SqlSession> threadLocal=new ThreadLocal<SqlSession>();//建立本地线程
创建线程局部变量threadLocal,用来保存Mybatis的threadLocal
static{//静态与,加载时执行一次,在类初始化之前实现
SqlSessionFactoryBuilder builder=null;
Reader reader=null;
try {
reader=Resources.getResourceAsReader(resource);//将配置文件资源作为字符流
builder=new SqlSessionFactoryBuilder();//初始化sqlsession工厂构造器对象
sqlsf=builder.build(reader);//通过sqlsession工厂构造器对象将字符流建立SqlSession对象
} catch (IOException e) {
e.printStackTrace();
throw new ExceptionInInitializerError("初始化mybatis错误!");
}
}
public static SqlSessionFactory getSqlSessionFactory(){
return sqlsf;
}
public static SqlSession getSession(){
SqlSession session=threadLocal.get();//得到线程当前的SqlSession
//可以保证每个线程对应一个数据对象,在任何时刻都操作的是这个对象。
if(session==null){
session=sqlsf.openSession();//建立SqlSession
threadLocal.set(session);//将新建立的SqlSession放在本地线程中
}
return session;
}
public static void closeSession(){
SqlSession session=threadLocal.get();//得到本地线程中的SqlSession
threadLocal.set(null);//设置本地线程threadLocal为空
if (session !=null){
session.close();
}
}
}
</pre><pre name="code" class="java">
二、查询数量以及根据一个参数查询对象的属性
2-1映射文件
<?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">
<mapper namespace="com.yunhe.dao.EmpDao"><!--命名空间为dao层,方法在实现类中-->
<select id="empCount" resultType="int">
select count(1) from emp
</select>
<!--resultType为实体类的类型,对返回值类型在配置文件中命名别名-->
<!--单个参数进行查询,返回对象,但是该对象只有一个属性-->
<select id="empbyid" resultType="Empp" parameterType="Integer">
select ename from emp where empno=#{empNo}
</select>
</mapper>
2-2配置文件
<?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>
<typeAliases><!--对返回值类型进行别名命名-->
<typeAlias type="com.yunhe.entity.Emp" alias="Empp"/>
</typeAliases>
<environments default="XX">
<environment id="XX">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@172.16.17.160:1521:orcl"/>
<property name="username" value="scott"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/yunhe/dao/EmpDao-mapper.xml"/>
</mappers>
</configuration>
2-3dao的实现类中的方法
/**
* 无参数:查询总数
*/
public int empCount() {
// TODO Auto-generated method stub
int count=0;
SqlSession sqlsession=null;
try {
sqlsession=MybatisUtil.getSession();
count=sqlsession.selectOne("com.yunhe.dao.EmpDao.empCount");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return count;
}
/**
* 通过id查询某一个对象
*/
public Emp empbyid(Integer id){
SqlSession sqlsession=null;
Emp emp=null;
try {
sqlsession=MybatisUtil.getSession();
emp=sqlsession.selectOne("com.yunhe.dao.EmpDao.empbyid",id);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return emp;
}
2-4单元测试的方法
@Test
public void empcount(){
int i=edi.empCount();
System.out.println(i);
}
@Test
public void empbyid(){
Emp emp=edi.empbyid(7654);
System.out.println(emp.getEname());
}
@Test
<span style="font-size:24px;color:#ff6666;">3.通过对象的属性(多个)返回单个对象</span>
3-1映射文件
<pre name="code" class="java"><select id="empbyempid" resultType="Empp" parameterType="Empp">
select ename from emp where empno=#{empno} and job=#{job}
</select>
3-2dao的实现类中的方法
/**
* 通过对象查询某一个对象
*/
public Emp empbyempid(Emp emp){
SqlSession sqlsession=null;
Emp emp1=null;
try {
sqlsession=MybatisUtil.getSession();
emp1=sqlsession.selectOne("com.yunhe.dao.EmpDao.empbyempid",emp);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return emp1;
}
3-3单元测试的方法
@Test
public void empbyempid(){
Emp emp=new Emp();
emp.setEmpno(7654);
emp.setJob("SALESMAN");
Emp emp1=edi.empbyempid(emp);
System.out.println(emp1.getEname());
}
<span style="font-size:24px;color:#ff6666;">4.通过map集合(多个)返回多个对象</span>
4-1,映射文件
<pre name="code" class="java">
</pre><span style="color: rgb(255, 102, 102); font-size: 18px; ">4-2,dao的实现类中的方法</span><p></p><pre name="code" class="java">
</pre><pre name="code" class="java">
4-3,单元测试的方法