【MyBatis】MyBatis之如何配置
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之如何配置的更多相关文章
- Mybatis的二级缓存配置
一个项目中肯定会存在很多共用的查询数据,对于这一部分的数据,没必要每一个用户访问时都去查询数据库,因此配置二级缓存将是非常必要的. Mybatis的二级缓存配置相当容易,要开启二级缓存,只需要在你的 ...
- 【转】MyBatis学习总结(三)——优化MyBatis配置文件中的配置
[转]MyBatis学习总结(三)——优化MyBatis配置文件中的配置 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis的con ...
- Mybatis非mapper代理配置
转: Mybatis非mapper代理配置 2017年04月26日 20:13:48 待长的小蘑菇 阅读数:870 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...
- MyBatis 源码分析——配置信息
MyBatis框架的启动前期需要加载相关的XML配置信息.从官网上我们可以了解到他具有十几个节点.其中笔者认为比较重要的节点是settings节点.properties节点.environments节 ...
- Mybatis系列(二):优化MyBatis配置文件中的配置和解决字段名与实体类属性名不相同的冲突
原文链接:http://www.cnblogs.com/xdp-gacl/p/4264301.html http://www.cnblogs.com/xdp-gacl/p/4264425.ht ...
- mybatis generator配置,Mybatis自动生成文件配置,Mybatis自动生成实体Bean配置
mybatis generator配置,Mybatis自动生成文件配置,Mybatis自动生成实体Bean配置 ============================== 蕃薯耀 2018年3月14 ...
- MyBatis—mapper.xml映射配置
SQL文件映射(mapper文件),几个顶级元素的配置: mapper元素:根节点只有一个属性namespace(命名空间)作用: 1:用于区分不同的mapper,全局唯一. 2:绑定DAO接口,即面 ...
- Java Web开发之Spring | SpringMvc | Mybatis | Hibernate整合、配置、使用
1.Spring与Mybatis整合 web.xml: <?xml version="1.0" encoding="UTF-8"?> <web ...
- mybatis多表关联配置
首先需要的jar包 mybatis-3.4.1 配置文件(mybatis.cfg.xml) <?xml version="1.0" encoding="UTF-8& ...
- mybatis mapper xml文件配置resultmap时,id行和result行有什么区别?
mybatis mapper xml文件配置resultmap时,id行和result行有什么区别? <resultMap id = "CashInvoiceMap" typ ...
随机推荐
- ASP入门(八)-Request对象
Request是ASP的耳朵,它可以获得客户端传递来的消息. BinaryRead方法和TotalBytes属性 用于以二进制方式读取客户端的请求,比如处理通过客户端上传文件时,通常使用这个方法来读取 ...
- Direct2D教程VI——转换(Transform)
目前博客园中成系列的Direct2D的教程有 1.万一的 Direct2D 系列,用的是Delphi 2009 2.zdd的 Direct2D 系列,用的是VS中的C++ 3.本文所在的 Direct ...
- javascript常用的公共方法
附件下载 //摘要:将指定字符串中的格式项替换为指定数组中相应对象的字符串表示形式. //参数:复合格式字符串. //返回结果:format的副本,其中的格式项已替换为 args 中相应对象的字符串表 ...
- LintCode: Cosine Similarity
C++ class Solution { public: /** * @param A: An integer array. * @param B: An integer array. * @retu ...
- JAVA遍历HashMap和ArrayList
List Map 基础信息 HashMap 最近写程序经常需要遍历集合,所以总结一下内容: 一.简单实现 Map map = new HashMap(); for(Object o : map.key ...
- Linux多线程同步之相互排斥量和条件变量
1. 什么是相互排斥量 相互排斥量从本质上说是一把锁,在訪问共享资源前对相互排斥量进行加锁,在訪问完毕后释放相互排斥量上的锁. 对相互排斥量进行加锁以后,不论什么其它试图再次对相互排斥量加锁的线程将会 ...
- Linux下设置oracle环境变量
Linux设置Oracle环境变量 方法一:直接运行export命令定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新s ...
- 【Windows】XShell中使用小键盘和ALT键(作Meta键),使BackSpace正常
小键盘: 打开终端的Session属性,VT模式,初始数字键盘模式,设置为普通 ALT键: 打开终端的Session属性,元(Meta)键仿真,将ALT用作Meta键 BackSpace: 打开终端的 ...
- VREP中使用其它Lua库
VREP中的Regular API中有一些矩阵操作的函数,不过有时候还是不能满足计算需求,这时就需要在VREP中使用其它科学计算库(或者用Python/MATLAB之类的外部程序控制). 在这里下载L ...
- nno Setup入门(一)——最简单的安装脚本
一个最简单的安装脚本: 1.最简单的安装文件脚本: [setup] AppName=Test AppVerName=TEST DefaultDirName="E:\TEST" Ap ...