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. 判断一个整数是否是2的n次方

    参考:http://bbs.csdn.net/topics/370058619 如题,如何判断一个整数是否是2的N次方,我能想到的方法有两个 1.一直除2,看最后是否等于1.(最笨的方法) 2.转换成 ...

  2. [Canvas]RPG游戏雏形 (地图加载,英雄出现并移动)

    源码请点此下载并用浏览器打开index.html观看 图例: 代码: <!DOCTYPE html> <html lang="utf-8"> <met ...

  3. 【代码片段】如何使用CSS来快速定义多彩光标

    对于web开发中,我们经常都看得到需要输入内容的组件和元素,比如,textarea,或者可编辑的DIV(contenteditable) ,如果你也曾思考过使用相关方式修改一下光标颜色的,那么这篇技术 ...

  4. zeroclipboard实现多浏览器复制到粘贴板功能

    zeroclipboard实现多浏览器复制到粘贴板功能(单个复制按钮和多个复制按钮) 为了更好的用户体验,现在很多网站中文本框的内容只需要点击复制按钮这样就能把内容复制到粘贴板了:出于兼容性的考虑,基 ...

  5. 【树莓派】树莓派刷Android系统

    树莓派3安装Android TV系统图文教程 http://www.mz6.net/news/android/6866.html 树莓派3 Android TV系统怎样安装?树莓派3一个重要用途就是当 ...

  6. apache跨域

    http://www.cnblogs.com/2050/p/3191744.html http://blog.csdn.net/qq_15283821/article/details/54405805 ...

  7. MongoDB numa系列问题一:[initandlisten] connection refused because too many open connections:

    1:Mongod日志有很多这样的报错: [initandlisten] connection refused because too many open connections: 2:查看系统的限制 ...

  8. C#DES加密,JavaDES解密,另转C#和Java实现Des完整代码

    C#DES加密,JavaDES解密,另转C#和Java实现Des完整代码 转载 2014年06月17日 17:36:09 标签: DES / C#DES / JavaDES / C#和Java交叉DE ...

  9. 【转】IP地址、子网掩码、网络号、主机号、网络地址、主机地址以及ip段

    背景知识 IP地址 IP地址被用来当做Internet上的电脑的身份编号.大家日常见到的情况是每台联网的PC上都需要有IP地址,才能正常通信.我们可以把“个人电脑”比作“一台电话”,那么“IP地址”就 ...

  10. d3dx9库函数

    这几天参考了csdn上大坡先生()整理的d3dx9的库函数,我做了一些机械的事情.就算过年练打字了.以下为我整理的d3dx9库函数简略版,以后除了msdn外,存档备用: D3DXCOLOR* D3DX ...