博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【MyBatis】MyBatis之如何配置
阅读量:4683 次
发布时间:2019-06-09

本文共 5073 字,大约阅读时间需要 16 分钟。

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文件:

sqlmap-config.xml

DeptMapper.xml文件:

insert into DEPT(DEPTNO,DNAME,LOC) values (#{deptno},#{dname},#{loc})
update DEPT set dname=#{name} where deptno=#{no}
update DEPT set DNAME=#{dname},LOC=#{loc} where DEPTNO=#{deptno}
delete from DEPT where DEPTNO=#{id}
DeptMapper.xml

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

db.properties文件:

driverClassName=oracle.jdbc.OracleDriverurl=jdbc:oracle:thin:@localhost:1521:xepassword=517839username=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 ;增删改为 void 或 int* 4.SQL 定义文件中 namespace="cn.test.mapper.DeptMapper"*/public interface DeptMapper { public List
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文件中的:

应该在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
list=deptDao.findAll(); for(Dept d:list){ System.out.println(d); } //提交事务,mybatis默认不提交 session.commit(); session.close(); }}
MyBatisTest.java

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

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

 

转载于:https://www.cnblogs.com/HDK2016/p/7214436.html

你可能感兴趣的文章
gridview 自定义value值
查看>>
2018二月实现计划成果及其三月规划
查看>>
封装springmvc处理ajax请求结果
查看>>
jQuery+ localStorage 实现一个简易的计时器
查看>>
tyvj P2018 「Nescafé26」小猫爬山 解题报告
查看>>
类名.class和getClass()区别
查看>>
开发脚本自动部署及监控
查看>>
JavaScript--语句
查看>>
(五)数据库服务学习入门
查看>>
12/17面试题
查看>>
css 继承和层叠
查看>>
【转载】正则表达式全部符号解释
查看>>
javascript实现图片轮播3D效果
查看>>
ssl初一组周六模拟赛【2018.3.17】
查看>>
[RxJS] Avoid mulit post requests by using shareReplay()
查看>>
C++和C#之间的数据类型对应关系
查看>>
模型分离(选做)
查看>>
LeetCode 242. Valid Anagram
查看>>
观察者模式------《Head First 设计模式》
查看>>
JSP表单提交乱码
查看>>