1. 新建项目,引入JAR包,这里Maven管理
pom.xml配置文件里面的
<!--mybatis的jar包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--oracle不允许maven下载驱动包-->
<!--oracle jdbc.jar-->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4.0</version>
</dependency>
2. 创建Mybatis主配置文件(代码官网找的)
Mybatis官网地址:
http://www.mybatis.org/mybatis-3/zh/getting-started.html
<?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>
<!--约束 DTD(Documnet Type Definition) 文档类型定义
XSD(XML Schemas Definition) XML文档的结构定义 -->
<!--环境配置,可以配置多个环境链接不同的数据源-->
<environments default="development">
<environment id="development">
<!--事务管理器 JDBC 自定处理事务 MANAGERD 事务交给容器管理-->
<transactionManager type="JDBC"/>
<!--数据源配置,链接数据库的4要素 POOLED 使用链接池-->
<!--type 有三种属性
POOLED:使用Mybatis自带的数据库连接池来管理数据库连接
UNPOOLED:不使用任何数据库连接池来管理数据库连接
JNDI:jndi形式使用数据库连接、主要用于项目正常使用的时候-->
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="username" value="scott"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<!--告诉mybatis需要引入哪些Mapper映射文件。那什么又是Mapper映射文件呢?
它是Java实体类与数据库对象之间的桥梁。在实际的使用过程中,
一般一个Mapper文件对应一个数据库操作Dao接口。-->
<mappers>
<mapper resource="mapper/DeptDaoMapper.xml"/>
</mappers>
<!-- 第一种方式:通过resource指定 -->
<!-- 第二种方式, 通过class指定接口,进而将接口与对应的xml文件形成映射关系
不过,使用这种方式必须保证 接口与mapper文件同名(不区分大小写),
我这儿接口是UserDao,那么意味着mapper文件为UserDao.xml
<mapper class="com.dy.dao.UserDao"/>
-->
<!-- 第三种方式,直接指定包,自动扫描,与方法二同理
<package name="com.dy.dao"/>
-->
<!-- 第四种方式:通过url指定mapper文件位置
<mapper url="file://........"/>
-->
</configuration>
引入Mapper映射文件
<?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.aaa.mb.dao.DeptDao">
<!--部门列表查询 resultType返回值类型 通过语句和实体做了映射-->
<select id="getDept" resultType="com.aaa.mb.entity.Dept">
select deptno as deptNo,dname,loc from dept
</select>
<!--部门添加 parameterType参数类型-->
<insert id="addDept" parameterType="com.aaa.mb.entity.Dept">
insert into dept values(#{deptNo},#{dname},#{loc})
</insert>
</mapper>
3. 创建工具类SqlSessionFactoryUtil创建SqlSessionFactory(官网建议采用单例模式)并生成SqlSession
public class SqlSessionFactoryUtil {
"私有创造"
private SqlSessionFactoryUtil(){};
"私有的静态的属性"
private static SqlSessionFactory sqlSessionFactory;
静态块根据配置文件创建SqlSessionFactory
没有名字保证其他地方不能调用,只执行一次
static{
try {
"配置文件转化为输入流"
"使用mybatis提供的类Resources加载配置文件,生成字节流"
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
"利用SqlSessionFactoryBuilder进行初始化"
"使用SqlSessionFactoryBuilder和上面生成的字节流构建"-->
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
"提供一个对象开放的方法,生成SqlSession"
public static SqlSession getSession(){
return sqlSessionFactory.openSession();
}
}
4. 创建实体,接口
public class Dept {
private Integer deptNo;
private String dname;
private String loc;
public Integer getDeptNo() {
return deptNo;
}
public void setDeptNo(Integer deptNo) {
this.deptNo = deptNo;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
}
public interface DeptDao {
/**
* 查询部门列表
* @return
*/
List<Dept> getDept();
/**
* 部门添加
* @param dept
* @return
*/
int addDept(Dept dept);
}
5. 创建测试类
1 使用工具类获取sqlSession
2 使用sqlSession提供的方法获取deptDao,
SqlSession.getMapper()就是绕一大圈去动态代理一个对象。这个对象根据返回类型和参数类型,最后用SqlSession的方法返回这个对象,可以理解为生成一个Mapper代理对象,并调用SqlSession的方法查询结果。
getMapper()具体实现点下方链接
https://blog.csdn.net/gwt0425/article/details/78071278
public class DeptTest {
@Test
public void getList(){
SqlSession sqlSession = null;
try {
//使用工具类获取sqlSession
sqlSession = SqlSessionFactoryUtil.getSession();
//使用sqlSession提供的方法获取deptDao
DeptDao deptDao = sqlSession.getMapper(DeptDao.class);
//循环遍历
List<Dept> deptList = deptDao.getDept();
if(deptList!=null&&deptList.size()>0){
for (Dept dept : deptList) {
System.out.println("部门标号:"+dept.getDeptNo()+",部门名称:"+dept.getDname()+",部门位置:"+dept.getLoc());
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(sqlSession!=null){
sqlSession.close();
}
}
}
@Test
public void testAdd(){
SqlSession sqlSession = null;
try {
sqlSession = SqlSessionFactoryUtil.getSession();
DeptDao deptDao = sqlSession.getMapper(DeptDao.class);
Dept dept = new Dept();
dept.setDeptNo(1);
dept.setDname("开发一部");
dept.setLoc("一楼");
int i = deptDao.addDept(dept);
if(i>0){
sqlSession.commit();
System.out.println("添加成功");
}else{
sqlSession.rollback();
System.out.println("添加失败");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(sqlSession!=null){
sqlSession.close();
}
}
}
}
以上便是个人的一点理解,如有错误,请及时纠正,不胜感激!