为什么要用mybatis?
(1) 系统的部分或全部数据来自现有数据库, 出于安全性的考虑, 只为开
发团队提供几条Select SQL(或存储过程) 以获取所需数据, 具体的表
结构不予公开。
(2) 开发规范中要求, 所有牵涉到业务逻辑部分的数据库操作, 必须在数
据库层由存储过程实现(对于金融行业而言, 工商银行、 中国银行和交
通银行, 都在开发规范中严格指定)。
(3) 系统数据处理量巨大, 性能要求极为苛刻, 这通常意味着我们必须由
经过高度优化的SQL语句(或存储过程) 才能达到系统性能设计指标.
什么是MyBatis?
- MyBatis是一个运用于持久层的数据操作框架
- MyBatis是从iBatis升级而来
- 使用 MyBatis提供的ORM机制, 业务逻辑层实现人员操作的是JAVA对象, 该层面与Hibernate机制中的相同。 对于具体的数据库操作而言,Hibernate会自动生成SQL并执行, 而MyBatis要求开发人员具体编写SQL语句。MyBatis在数据库移植性和SQL开发工作量上进行了让步, 从而提升了系统设计的灵活性, 扩展了其自由空间。
MyBatis的优势?
- 支持ORM
- 支持动态SQL
- 外部化SQL语句
- 封装SQL语句
demo结构图
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mybatis</groupId>
<artifactId>mybatisDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
</dependencies>
</project>
我这里是用的oracle数据库,但由于oracle数据库不能引用,具体你可以查下百度。
我这里是直接把架包下下来引用的。
2第二步,创建mybatis的config文件,前提你要有这两个文件。,
大家可以到我度盘去链接: https://pan.baidu.com/s/1o8hmPvW 密码: wqsh
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "--mybatisconfig--" "mybatis-3-config.dtd" >
<configuration>
<typeAliases>
<!--你的bean文件,在mapper文件中有引用-->
<typeAlias type="com.shandian.bean.Emp" alias="emp" />
</typeAliases>
<environments default="oracle">
<environment id="oracle">
<transactionManager type="JDBC">
</transactionManager>
<!--连接池 -->
<dataSource type="POOLED">
<!--连接数据库驱动 -->
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<!-- URL -->
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
<!--用户名 -->
<property name="username" value="scott" />
<property name="password" value="tiger" />
</dataSource>
</environment>
</environments>
<mappers>
<!--引用你的empmapper.xml文件 -->
<mapper resource="com/shandian/mapper/empmapper.xml" />
</mappers>
</configuration>
3,创建mapper文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "--mybatismapper--" "mybatis-3-mapper.dtd" >
<mapper namespace="com.shandian.mapper.empmapper">
<!--resultType的值引用了config中typeAliases> <typeAlias type="com.shandian.bean.Emp"
alias="emp" /> </typeAliases>的alias的值 -->
<select id="queryall" resultType="emp" resultMap="empResult">
select *from
emp
</select>
<!-- 添加 -->
<!-- 添加操作并没有结果集,结果类型也没有 -->
<!--useGeneratedKeys="true"这个可以实现标识列的自动增长,但oracle并没不能自动增长 -->
<insert id="add" parameterType="emp">
insert into emp(empno,ename,job)
values(emp_sql.nextval,#{ename},#{job})
</insert>
<!-- 进行删除操作 -->
<!-- id的意思表示命名空间的唯一标识,与映射接口中的方法一致 -->
<delete id="delete" parameterType="int">
delete from emp where
empno=#{empno}
</delete>
<!-- 修改 -->
<update id="update" parameterType="emp">
update emp
<!-- 动态的sql修改 -->
<set>
<!--test里面的值是你bean里面的变量名,而不是数据库中的字段名 -->
<if test="ename!=null">
ENAME=#{ename},
</if>
<if test="job!=null">
JOB=#{job},
</if>
<if test="mgr!=null">
MGR=#{mgr},
</if>
<if test="hiredate!=null">
HIREDATE=#{hiredate},
</if>
<if test="sal!=null">
SAL=#{sal},
</if>
<if test="comm!=null">
COMM=#{comm},
</if>
<if test="Integerno!=null">
DEPTNO=#{Integerno}
</if>
</set>
where empno=#{empno}
</update>
<resultMap type="emp" id="empResult">
<id column="EMPNO" property="empno" />
<result column="ENAME" property="ename" />
<result column="JOB" property="job" />
<result column="MGR" property="mgr" />
<result column="HIREDATE" property="hiredate" />
<result column="SAL" property="sal" />
<result column="COMM" property="comm" />
<result column="DEPTNO" property="Integerno" />
</resultMap>
</mapper>
4,此mapper所对应的映射接口,(推荐使用这种操作)
package com.shandian.mapper;
import java.util.List;
import com.shandian.bean.Emp;
//注意,这里的名字必须与com.shandian.mapper.empmapper,中empmapper的名字一致且必须在同一包中,不然就不能映射
public interface empmapper {
// 这个方法名必须与empmaper中进行添加操作的名字一样的.
// 参数的类型也要一致
void add(Emp emp);
// 查询全部
List<Emp> queryall();
// 进行删除
void delete(int id);
// 修改
void update(Emp emp);
}
5,简单的对其进行了增删查改操作
package com.shandian.texst;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.shandian.bean.Emp;
import com.shandian.mapper.empmapper;
public class EmpTexst {
// 测试
public static void main(String[] args) {
// 查询全部
// t1();
// 添加
// t2();
// 删除
// t3();
// 修改
t4();
}
private static void t4() {
// TODO Auto-generated method stub
try {
Reader reader = Resources.getResourceAsReader("mybatisconfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(reader);
SqlSession session = factory.openSession();
Emp emp = new Emp();
emp.setEmpno(7720);
emp.setEname("java");
emp.setJob("java");
empmapper empmapper = session.getMapper(empmapper.class);
empmapper.update(emp);
session.commit();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void t3() {
// TODO Auto-generated method stub
try {
Reader reader = Resources.getResourceAsReader("mybatisconfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(reader);
SqlSession session = factory.openSession();
empmapper empmapper = session.getMapper(empmapper.class);
empmapper.delete(7717);
session.commit();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void t2() {
// TODO Auto-generated method stub
try {
// 加载配置
Reader reader = Resources.getResourceAsReader("mybatisconfig.xml");
// 创建
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(reader);
SqlSession session = factory.openSession();
Emp emp = new Emp();
emp.setEname("admin");
emp.setJob("Android33");
// 添加1操作
/*
* session.insert("com.shandian.mapper.empmapper.add", emp);
* session.commit();
*/
// 添加2操作,这种做法是官方推荐的
empmapper empMapper = session.getMapper(empmapper.class);
empMapper.add(emp);
session.commit();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void t1() {
// TODO Auto-generated method stub
// 加载配置
try {
Reader reader = Resources.getResourceAsReader("mybatisconfig.xml");
// 创建
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
// 解析资源
SqlSessionFactory factory = builder.build(reader);
// 打开session
SqlSession session = factory.openSession();
// 1传统写法,不推荐
/*
* List<Emp> list =
* session.selectList("com.shandian.mapper.empmapper.queryall"); for
* (Emp emp : list) { System.out.println(emp); }
*/
// 2,用接口映射的形式进行查询,官方推荐
empmapper empmapper = session.getMapper(empmapper.class);
List<Emp> list = empmapper.queryall();
for (Emp emp : list) {
System.out.println(emp);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
demo的下载
链接: https://pan.baidu.com/s/1slvZObr 密码: 6bi4