Mybatis的配置和使用

时间:2022-01-16 05:12:00

mybatis-config.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>
<!-- 外部属性文件导入,属性文件中通常配置数据库的连接信息 -->
<properties resource="com/etc/config/conf.properties"></properties>
<!-- 给每一实体类定义一个别名 :建议别名和类名相同-->
<typeAliases>
<!--
单个实体类的定义,建议别名和类名相同
<typeAlias alias="Grade" type="com.etc.entity.Grade"/>
-->
<!-- 自动为实体类创建一个别名,创建的命名规则是:别名于类名相同 -->
<package name="com.etc.entity"/>
</typeAliases>
<!--配置environment环境(一般情况下有三个),开发换技能,测试环境,运行环境-->
<environments default="development">
<!-- 开发环境配置,每个SqlSessionFactory对应一个环境 -->
<environment id="development">
<!-- 事务配置 type= JDBC、MANAGED 1.JDBC:这个配置直接简单使用了JDBC的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。
2.MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期
(比如Spring或JEE应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望这样,因此如果你需要从连接中停止它,将closeConnection属性设置为false -->
<transactionManager type="JDBC" />
<!-- 数据源 类型POOLED:表示使用连接池 UNPOOLED表示不使用连接池 NDI在容器中配置连接池 -->
<dataSource type="POOLED">
<!-- config.conf.properties属性中取连接数据库的信息 -->
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
<!-- 测试环境配置 -->
<environment id="test">
<transactionManager type="JDBC" />
<!-- 数据源 类型POOLED:表示使用连接池 UNPOOLED表示不使用连接池 NDI在容器中配置连接池 -->
<dataSource type="POOLED">
<!-- config.conf.properties属性中取连接数据库的信息 -->
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 映射文件,mapper的配置文件(数据访问接口的配置文件):注意接口名称要与配置文件名称一样 -->
<mappers>
<!--扫描包路径下所有Mapper.xml文件-->
<package name="com.etc.dao"/>
</mappers>
</configuration>


conf.properties的设置如下:

driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/myelipes?characterEncoding\=utf-8
username=root
password=123123


GradeBao代码如下:

public interface GradeBao {
public List<Grade> find();
public Grade findId(int id);

}

GradeBizImpl.java代码如下:

package com.etc.biz.impl;


import java.util.List;


import org.apache.ibatis.session.SqlSession;


import com.etc.biz.GradeBiz;
import com.etc.dao.GradeBao;
import com.etc.entity.Grade;
import com.etc.util.SqlSessionFactoryUtil;


public class GradeBizImpl implements GradeBiz{


@Override
public List<Grade> find() {
//创建对象
SqlSession sqlSession = null;
List<Grade> list = null;
try {
//调用工厂获取接口
sqlSession = SqlSessionFactoryUtil.getSqlSession();
//通过sqlSession对象获取数据访问接口,采用反射机制
GradeBao dao = sqlSession.getMapper(GradeBao.class);
//调用数据访问接口的方法 ,会自动查询映射文件中的对应得指令,返回结果集
list = dao.find();
} catch (Exception e) {
System.out.println(e.getMessage());
}finally{
sqlSession.close();
}


return list;
}


@Override
public Grade findId(int id) {
// TODO Auto-generated method stub
return null;
}


}




GradeBao.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">
<!-- 根据节点,namespace:表示配置文件映射的数据接扣类 -->
<mapper namespace="com.etc.dao.GradeBao">
<!-- 定义返回解过集type:表示返回的类型别名 id:表示结果集返回的名称 -->
<resultMap type="Grade" id="gradeMap">
<!-- id:表示主键 property:实体类的属性名 column:表示数据库表中的字段名 -->
<id property="id" column="id"/>
<!-- result表示一般属性 property:实体类的属性名 column:表示数据库表中的字段名 -->
<result property="gradeName" column="gradeName"/>
</resultMap>
<!-- 这个select节点表示执行查询,调用接口方法则根据方法名来找节点id值,
resultMap:表示查询返回的结果封装在哪个结果集中-->
<select id="find" resultMap="gradeMap">
select * from grade
</select>
</mapper>


SqlSessionFactoryUtil.java:代码如下

package com.etc.util;


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


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


//辅助类创建SqlSession对象
public class SqlSessionFactoryUtil {
//创建SqlSessionFactory对象
static SqlSessionFactory factory = null;
//创建文件流
static InputStream is = null;
//静态代码块读取主配置文件,获取返回文件流。
static {
try {
is = Resources.getResourceAsStream("com/etc/config/mybatis-config.xml");
} catch (IOException e) {

e.printStackTrace();
}
}
//采用单例模式保证工程的唯一性
public static SqlSessionFactory getSqlSessionFactory(){
//懒汉式
if(factory == null){
//创建sqlsession工厂
factory = new SqlSessionFactoryBuilder().build(is);
}
return factory;
}
//获取Sqlsession对象
public static SqlSession getSqlSession(){
return getSqlSessionFactory().openSession();
}

}



test.java代码如下:

package com.etc;


import java.util.List;


import com.etc.biz.GradeBiz;
import com.etc.biz.impl.GradeBizImpl;
import com.etc.entity.Grade;


public class test {
public static void main(String[] args) {
GradeBiz biz = new GradeBizImpl();
List<Grade> list = biz.find();
for (Grade grade : list) {
System.out.println(grade);
}


}
}




Mybatis的配置和使用