1,MyBatis简介

MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。

2,搭建MyBatis框架

首先就是导入MyBatis.jar的jar包,然后把jar包和数据库连接的包放置到项目的lib目录下。笔者这里使用的是Oracle数据库。

项目结构图如下:

上面这张图片是整个项目结构,下面开始建立文件。

sqlmap-config.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE configuration             PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"            "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<!--引入数据库信息文件-->
<properties resource="db.properties" /> <environments default="environment">
<environment id="environment">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driverClassName}" />
<property name="url" value="${url}"/>
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 加载SQL定义文件 -->
<mappers>
<mapper resource="cn/test/sql/DeptMapper.xml" />
</mappers>
</configuration>

sqlmap-config.xml

DeptMapper.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="cn.test.mapper.DeptMapper"> <!-- 查询操作-->
<select id="findAll" resultType="cn.test.entity.Dept">
select * from DEPT
</select>
<select id="findById" resultType="cn.test.entity.Dept" parameterType="int">
select * from DEPT where DEPTNO=#{no}
</select> <!--增加操作-->
<insert id="save" parameterType="cn.test.entity.Dept">
<!--#{deptno},#{dname},#{loc} 对应着Dept类中变量名称-->
insert into DEPT(DEPTNO,DNAME,LOC) values (#{deptno},#{dname},#{loc})
</insert> <!--修改操作-->
<update id="upadteNameByNo" parameterType="java.util.Map">
<!--在map集合中,必需存在两个key,分别为name和no-->
update DEPT set dname=#{name} where deptno=#{no}
</update>
<update id="update" parameterType="cn.test.entity.Dept">
update DEPT set DNAME=#{dname},LOC=#{loc} where DEPTNO=#{deptno}
</update> <!-- 如果parameterType为单个值,#{标识符}表达式标识符没有约定 -->
<delete id="delete" parameterType="int">
delete from DEPT where DEPTNO=#{id}
</delete>
</mapper>

DeptMapper.xml

在文件中我们看见 #{deptno} 的代码,表示Dept类实例中的deptno变量。这里除了写成 #{deptno} 还可以写成 ${deptno} 。两者的区别就是#在底层是采用SQL语句预编译插入参数的,$在底层是采用拼接SQL语句插入参数的。

db.properties文件:

driverClassName=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
password=517839
username=system

db.properties

Dept.java文件:

package cn.test.entity;

import java.io.Serializable;

import org.apache.ibatis.type.Alias;

public class Dept implements Serializable{

    private int deptno;
private String dname;
private String loc; public int getDeptno() {
return deptno;
}
public void setDeptno(int 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;
}
@Override
public String toString() {
return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";
}
}

Dept.java

该实体类的建立,其中实体类的变量名称必须和数据库中表的字段名称一致,否则通过反射就不能赋上正确的值。还有一个小细节,如果数据库中对应表的字段类型为NUMBER,那么在实体类中最好声明为Integer类,而不是基本数据类型int,不过这误伤大雅,因为自从JDK1.5开始支持了自动装箱和自动拆箱了。

笔者的数据库中Dept表结构如下:

DeptMapper.java文件:

package cn.test.mapper;

import java.util.List;
import java.util.Map; import cn.test.entity.Dept;
/**
* 方法定义参考 SQL 定义的 id 、 parameterType 、 resultType 属性
* @author Administrator
* 1. 方法名与 id 属性一致
* 2. 参数类型与 parameterType 属性一致
* 3. 返回结果:多行查询 List<resultType> ;单行查询 resultType ;增删改为 void 或 int
* 4.SQL 定义文件中 namespace="cn.test.mapper.DeptMapper"
*/
public interface DeptMapper { public List<Dept> findAll(); public Dept findById(int id); public int save(Dept dept); public int update(Dept dept); public int delete(int id); public int upadteNameByNo(Map map);
}

DeptMapper.java

该接口中所有方法,都必须和DeptMapper.xml中配置的语句方法相对应。语法为id对应方法名,resultType对应返回值类型(如果有多个结果,可以加上List集合),parameterType为参数类型。比如DeptMapper.xml文件中的:

    <select id="findById" resultType="cn.test.entity.Dept" parameterType="int">
select * from DEPT where DEPTNO=#{no}
</select>

应该在DeptMapper.java中对应一个方法:

public Dept findById(int id);

MyBatisUtil.java文件:

package cn.test.util;

import java.io.IOException;
import java.io.Reader; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MyBatisUtil { public static SqlSession getSession() throws IOException{
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
Reader reader = Resources.getResourceAsReader("sqlmap-config.xml");
SqlSessionFactory factory = builder.build(reader);
SqlSession session = factory.openSession();
return session;
}
}

MyBatisUtil.java

这是一个简单的工具类,该工具用于简化SqlSession对象的获取。

MyBatisTest.java文件:

package cn.test.test;

import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import cn.test.entity.Dept;
import cn.test.mapper.DeptMapper;
import cn.test.util.MyBatisUtil; public class MyBatisTest { @Test
public void testName1() throws Exception {
SqlSession session = MyBatisUtil.getSession();
DeptMapper deptDao=session.getMapper(DeptMapper.class);
Map map=new HashMap();
map.put("name", "'goslings'");
map.put("no",40); //通过编号更新部门名称
deptDao.upadteNameByNo(map); //查询所有信息
List<Dept> list=deptDao.findAll();
for(Dept d:list){
System.out.println(d);
}
//提交事务,mybatis默认不提交
session.commit();
session.close();
}
}

MyBatisTest.java

MyBatis提交事务默认是关闭的,也就是需要手动提交, session.commit(); 。可以进行一些设置,使得Mybatis自动提交事务。

这样为止,一个简单的MyBatis框架就搭建好了。

【MyBatis】MyBatis之如何配置的更多相关文章

  1. Mybatis的二级缓存配置

    一个项目中肯定会存在很多共用的查询数据,对于这一部分的数据,没必要每一个用户访问时都去查询数据库,因此配置二级缓存将是非常必要的.  Mybatis的二级缓存配置相当容易,要开启二级缓存,只需要在你的 ...

  2. 【转】MyBatis学习总结(三)——优化MyBatis配置文件中的配置

    [转]MyBatis学习总结(三)——优化MyBatis配置文件中的配置 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis的con ...

  3. Mybatis非mapper代理配置

    转: Mybatis非mapper代理配置 2017年04月26日 20:13:48 待长的小蘑菇 阅读数:870   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...

  4. MyBatis 源码分析——配置信息

    MyBatis框架的启动前期需要加载相关的XML配置信息.从官网上我们可以了解到他具有十几个节点.其中笔者认为比较重要的节点是settings节点.properties节点.environments节 ...

  5. Mybatis系列(二):优化MyBatis配置文件中的配置和解决字段名与实体类属性名不相同的冲突

    原文链接:http://www.cnblogs.com/xdp-gacl/p/4264301.html     http://www.cnblogs.com/xdp-gacl/p/4264425.ht ...

  6. mybatis generator配置,Mybatis自动生成文件配置,Mybatis自动生成实体Bean配置

    mybatis generator配置,Mybatis自动生成文件配置,Mybatis自动生成实体Bean配置 ============================== 蕃薯耀 2018年3月14 ...

  7. MyBatis—mapper.xml映射配置

    SQL文件映射(mapper文件),几个顶级元素的配置: mapper元素:根节点只有一个属性namespace(命名空间)作用: 1:用于区分不同的mapper,全局唯一. 2:绑定DAO接口,即面 ...

  8. Java Web开发之Spring | SpringMvc | Mybatis | Hibernate整合、配置、使用

    1.Spring与Mybatis整合 web.xml: <?xml version="1.0" encoding="UTF-8"?> <web ...

  9. mybatis多表关联配置

    首先需要的jar包 mybatis-3.4.1 配置文件(mybatis.cfg.xml) <?xml version="1.0" encoding="UTF-8& ...

  10. mybatis mapper xml文件配置resultmap时,id行和result行有什么区别?

    mybatis mapper xml文件配置resultmap时,id行和result行有什么区别? <resultMap id = "CashInvoiceMap" typ ...

随机推荐

  1. curl_setopt — 设置 cURL 传输选项

    curl_setopt (PHP 4 >= 4.0.2, PHP 5, PHP 7) curl_setopt — 设置 cURL 传输选项 bool curl_setopt ( resource ...

  2. 浅谈压缩感知(十四):傅里叶矩阵与小波变换矩阵的MATLAB实现

    主要内容: 傅里叶矩阵及其MATLAB实现 小波变换矩阵及其MATLAB实现  傅里叶矩阵及其MATLAB实现 傅里叶矩阵的定义:(来源: http://mathworld.wolfram.com/F ...

  3. Core Java-多线程-线程的生命周期

    0. 在介绍线程前我们先看一下什么是进程? 进程是线程的母亲,如果在大学计算机课程里读过操作系统一定不会陌生. 所谓进程,它是计算机程序关于某数据集上的一次活动,是系统进行资源分配和调度的基本单位,是 ...

  4. VO、DTO与领域模型的概念

    业务对象模型(也叫领域模型 domain model)是描述业务用例实现的对象模型.它是对业务角色和业务实体之间应该如何联系和协作以执行业务的一种抽象.业务对象模型从业务角色内部的观点定义了业务用例. ...

  5. 【树莓派】服务配置相关2:基于RPi Desktop的服务配置

    该文接续之前写过的一篇:[树莓派]服务配置相关. 这是我个人用来进行树莓派盒子安装配置的脚本,对于外部其他博友,可以部分参考,但不需要逐个引用. 现在有一定更新,部分按如下脚本来操作: step1: ...

  6. Redis问题MISCONF Redis is configured to save RDB snapshots....

    Redis问题MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on di ...

  7. js 判断是否是空对象

    主要思路 我们要考虑到的主要有:js原生对象,宿主对象(浏览器上面的). 首先对于宿主对象 主要判断是DOM 对象 和是否是window 对象 是否是DOM对象  value.nodeType 是否存 ...

  8. MyArrayList——自己实现ArrayList

    注:转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5965205.html      代码已移植:https://github.com/ygj0930/MyAr ...

  9. 【翻译自mos文章】当/var/tmp文件夹被remove掉之后,GI crash,并启动失败,原因是ohasd can not create named pipe

    来源于: GI crashes and fails to start after "/var/tmp" directory was removed as ohasd can not ...

  10. 6、redis之使用spring-data-redis的Template

    POM: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.o ...