什么是 MyBatis?
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
MyBatis架包下载:https://mvnrepository.com/artifact/org.mybatis/mybatis
我这里是用JUnit测试的:右键项目>>>properties>>>java Build Path>>>选中Libraries然后点击Add Library…在选中JUnit下一步换成JUNnit4就OK了
MysBatis实例:
根据上图创四个类(java包下)
Emp.java
package com.ps;
public class Emp {
private int empno;
private String ename;
private String job;
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
@Override
public String toString() {
return "Emp [empno=" + empno + ", ename=" + ename + ", job=" + job + "]";
}
}
EmpMapping.java
package com.ps;
import java.util.List;
/**
* 无注解,有xml文件
* @author
*
* 2018年11月10日上午11:03:52
*/
public interface EmpMapping {
public List<Emp> queryEmp();
public List<Emp> queryByEmpno(int empno,String name);
public List<Emp> queryByEmp(Emp emp);
public void addEmp(Emp emp);
public void deleteEmp(int empno);
}
TestMybatis.java
package com.ps;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
/**
* mybatis的终极思想:1.为了解决sql语句硬编码的问题(约定大于配置) 2.解决面向对象设计问题(面向接口编程)
* 每个对象对应一个xml文件(映射文件 MAPPING) 设:emp表 emp.xml dept表 dept.xml
*
* @author 伍光政
*
* 2018年11月10日上午9:06:27
*/
public class TestMybatis {
// 获取SqlSession对象
public static SqlSession getSession() {
String resource = "/xml/config.xml";
InputStream resourceAsStream = TestMybatis.class.getResourceAsStream(resource);
// session工厂 负责产生会话
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 会话就是打开了和数据库的链接
SqlSession openSession = sqlSessionFactory.openSession();
return openSession;
}
public static void main(String[] args) {
}
// 增加(无注解)
@Test
public void test3() {
Emp emp = new Emp();
emp.setEname("理事ssss");
emp.setJob("工作sssss");
SqlSession session = TestMybatis.getSession();
try {
EmpMapping userOperation = session
.getMapper(EmpMapping.class);
userOperation.addEmp(emp);
session.commit();
} finally {
session.close();
}
}
// 删除(无注解)
@Test
public void test2() {
SqlSession session = TestMybatis.getSession();
try {
EmpMapping userOperation = session
.getMapper(EmpMapping.class);
userOperation.deleteEmp(10037);
session.commit();
} finally {
session.close();
}
}
/*
* 测试无注解的接口(查询)
*/
@Test
public void test1() {
// 不建议使用,将来全部要使用接口的模式来写
/*
* List<Emp> selectList = openSession.selectList("com.ps.EmpMapping.queryEmp");
* System.out.println(selectList);
*/
EmpMapping mapper2 = getSession().getMapper(EmpMapping.class);
List<Emp> EmpMapping = mapper2.queryEmp();
System.out.println(EmpMapping);// (无参,无注解)
List<Emp> EmpMapping2 = mapper2.queryByEmpno(55, "理事");
System.out.println(EmpMapping2);// {多参,无注解)
Emp emp = new Emp();
emp.setEmpno(55);
emp.setEname("理事ssss");
emp.setJob("工作sssss");
List<Emp> EmpMapping3 = mapper2.queryByEmp(emp);
System.out.println(EmpMapping3);// {参数是对象,无注解)
}
/**
* 测试有注解的接口(查询)
*/
@Test
public void test() {
// 不建议使用,将来全部要使用接口的模式来写
/*
* List<Emp> selectList2 = openSession.selectList("com.ps.EmpMapper.queryEmp");
* System.out.println(selectList2);
*/
EmpMapper mapper = getSession().getMapper(EmpMapper.class);
List<Emp> EmpMapper = mapper.queryEmp();
System.out.println(EmpMapper);// (无参,有注解)
List<Emp> EmpMapper2 = mapper.queryByEmpno(55,"理事");
System.out.println(EmpMapper2);// (有参,有注解)
Emp emp = new Emp();
emp.setEmpno(55);
emp.setEname("理事");
List<Emp> EmpMapper3 = mapper.queryByEmp(emp);
System.out.println(EmpMapper3);// (有参,有注解)
}
}
EmpMapper.java
package com.ps;
import java.util.List;
import org.apache.ibatis.annotations.Select;
/**
* 接口映射
* 有注解 无xml文件
* @author
*
* 2018年11月10日上午10:51:34
*/
public interface EmpMapper {
@Select("select * from emp ")
public List<Emp> queryEmp();
@Select("select * from emp where empno = #{0} and ename = #{1}")
public List<Emp> queryByEmpno(int empno,String ename);
@Select("select * from emp where empno = #{empno} and ename = #{ename}")
public List<Emp> queryByEmp(Emp emp);
/*
* 可以给个别名
* @Select("select * from emp where empno = #{e.empno} and ename = #{e.ename}")
public List<Emp> queryByEmp(@Param("e") Emp emp);*/
}
在src的resources的包下:
jdbc.properties:
jdbcDriver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/m1dn
jdbcUsername=root
jdbcPassword=ps123456
config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 这里是资源文件路径 -->
<properties resource="jdbc.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbcDriver}" />
<property name="url" value="${jdbcUrl}" />
<property name="username" value="${jdbcUsername}" />
<property name="password" value="${jdbcPassword}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="xml/table/empMapper.xml"></mapper>
<mapper class="com.ps.EmpMapper"/>
</mappers>
</configuration>
empMapper.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 映射文件规范:
namespace属性不能少
sql语句 >>查询 必须告知单行返回的类型
-->
<mapper namespace="com.ps.EmpMapping">
<!--
请注意:id不能重复
如果参数是基本数据类型
可以用#{0}第一个参数#{1}第二个参数的方式
也可以使用#{param1}第一个参数 #{param1}第二个参数
-->
<select id="queryEmp" resultType="com.ps.Emp">
select * from emp
</select>
<select id="queryByEmpno" resultType="com.ps.Emp">
select * from emp where empno = #{0} and ename = #{1}
</select>
<select id="queryByEmp" resultType="com.ps.Emp" parameterType="com.ps.Emp">
select * from emp where empno = #{empno} and ename = #{ename}
</select>
<delete id="deleteEmp" parameterType="int">
DELETE FROM emp where empno = #{0}
</delete>
<insert id="addEmp" parameterType="com.ps.Emp" useGeneratedKeys="true" keyProperty="empno">
INSERT INTO emp(ename,job) VALUES (#{ename},#{job})
</insert>
</mapper>
包括一些配置的属性的例子:
https://www.cnblogs.com/luxiaoxun/p/4035040.html
希望能帮到你,也是帮助我自己