为简单的入门mybatis,理解其基本原理,现新建一个java项目(后期和spring整合,再创建web项目)。
1. 首先建立项目java project
创建好java项目后,在项目里new一个Source Folder里面放一些配置文件:日志记录文件、mysql驱动配置文件、数据库连接配置文件;并新建一个folder文件夹,将mybatis需要jar包:mybatis-3.3.0.jar
mysql驱动jar包:mysql-connector-java-5.1.15.-bin.jar
日志记录jar包:log4j.jar
分别添加进去并选择Build Path ——>add to build path导入Referenced Libraries中。
2.创建数据库,建立emp表
3.数据库连接配置jdbc.properties
#数据驱动
jdbc.driver=com.mysql.jdbc.Driver
#数据库连接属性
jdbc.url=jdbc:mysql://localhost:3306/employ?useUnicode=true&characterEncoding=UTF-8
#用户名
jdbc.username=root
#密码
jdbc.password=123
4.mybatis配置文件mybatisConfig.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">
<!--mybatis的配置文件 -->
<configuration>
<!-- 引入外部配置文件 -->
<properties resource="jdbc.properties"></properties>
<!--和spring整合后environments配置将废除 -->
<!-- 配置mybatis运行环境 -->
<environments default="cybatis">
<environment id="cybatis">
<!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC" />
<!-- mybatis提供了3 种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
<!-- POOLED 表示支持JDBC数据源连接池 -->
<!-- UNPOOLED 表示不支持数据源连接池 -->
<!-- JNDI 表示支持外部数据源连接池 -->
<!--数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
</configuration>
5.创建对应的实体对象model
package cuijiao.mybatis.java.model;
import java.util.Date;
/**
* @author cuijiao
*
*/
public class Emp {
private String empId;
private String empName;
private byte sex;
private Float salary;
private Date birthday;
private Integer deptId;
public String getEmpId() {
return empId;
}
public void setEmpId(String empId) {
this.empId = empId;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public byte getSex() {
return sex;
}
public void setSex(byte sex) {
this.sex = sex;
}
public Float getSalary() {
return salary;
}
public void setSalary(Float salary) {
this.salary = salary;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Integer getDeptId() {
return deptId;
}
public void setDeptId(Integer deptId) {
this.deptId = deptId;
}
@Override
public String toString() {
return "Emp [empId=" + empId + ", empName=" + empName + ", sex=" + sex + ", salary=" + salary + ", birthday="
+ birthday + ", deptId=" + deptId + "]";
}
}
6.创建方法接口EmpDao.java和定义操作empr表的sql映射文件EmpMapper.xml
EmpDao.java提供简单的查询功能
package cuijiao.mybatis.java.dao;
import cuijiao.mybatis.java.model.Emp;
/**
* @author cuijiao
*
*/
public interface EmpDao {
Emp selectEmp(String empId);
}
SQL映射文件有些顶级的标签
resultMap——最复杂也最常用,用来封装数据库结果集对象
sql——可以重用的SQL块,也可以被其他语句引用
select——映射查询语句
update——映射更新语句
insert——映射插入语句
delete——映射删除语句
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" >
<mapper namespace="cuijiao.mybatis.java.dao.EmpDao">
<!-- 在各种标签中的id属性必须和接口中的方法名相同 , id必须是唯一。 parameterType:方法的参数类型,resultType:方法返回的结果集类型 -->
<!-- #{}中的内容,为占位符,当参数为某个JavaBean时,表示放置该Bean对象的属性值 -->
<select id="selectEmp" resultType="cuijiao.mybatis.java.model.Emp"
parameterType="java.lang.String">
select * from emp where empId=#{empId}
</select>
</mapper>
7.此时需要在mybatis配置文件中注册EmpMapper.xml,给model起别名
<?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">
<!--mybatis的配置文件 -->
<configuration>
<!-- 引入外部配置文件 -->
<properties resource="jdbc.properties"></properties>
<!-- 为JAVA Bean起类别名 -->
<typeAliases>
<!-- 别名方式1,一个一个的配置 type中放置的是类的全路径,alias中放置的是类别名 -->
<!-- <typeAlias type="cuijiao.mybatis.java.model.Emp" alias="emp" /> -->
<!-- 别名方式2,自动扫描,将JAVA类的类名作为类的类别名 -->
<package name="cuijiao.mybatis.java.model" />
</typeAliases>
<!--和spring整合后environments配置将废除 -->
<!-- 配置mybatis运行环境 -->
<environments default="cybatis">
<environment id="cybatis">
<!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC" />
<!-- mybatis提供了3 种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
<!-- POOLED 表示支持JDBC数据源连接池 -->
<!-- UNPOOLED 表示不支持数据源连接池 -->
<!-- JNDI 表示支持外部数据源连接池 -->
<!--数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!--和spring整合后不需要专门配置,加注解即可@Mapper -->
<mappers>
<!-- 告知映射文件方式1,一个一个的配置 -->
<mapper resource="cuijiao/mybatis/java/dao/EmpMapper.xml" />
<!-- 告知映射文件方式2,自动扫描包内的Mapper接口与配置文件 -->
<!-- <package name="cuijiao/mybatis/java/dao/" /> -->
</mappers>
</configuration>
8.建一个工具类用来获取mybatis提供的sqlSession
package cuijiao.mybatis.java.util;
import java.io.IOException;
import java.io.InputStream;
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 {
/**
* SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由对它进行清除或重建。使用
* SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次, 最简单的就是使用单例模式或者静态单例模式
*/
public static SqlSessionFactory sessionFactory;
static {
try {
// 使用MyBatis提供的Resources类加载mybatis的配置文件
// Reader is = Resources.getResourceAsReader("mybatisConfig.xml");
InputStream is = Resources.getResourceAsStream("mybatisConfig.xml");
// 构建sqlSession的工厂
sessionFactory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 创建能执行映射文件中sql的sqlSession
public static SqlSession getSession() {
return sessionFactory.openSession();
}
}
9.写个测试,测试查询语句从数据库拿数据
package cuijiao.mybatis.java;
import org.apache.ibatis.session.SqlSession;
import cuijiao.mybatis.java.model.Emp;
import cuijiao.mybatis.java.util.MybatisUtil;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
excute();
}
private static void excute() {
SqlSession session = MybatisUtil.getSession();
// Mapper mapper=session.getMapper(EmpDao.class);
Emp emp = session.selectOne("cuijiao.mybatis.java.dao.EmpDao.selectEmp", "2222");
// session.commit();//增删改需要事务提交
session.close();// 关掉sqlSession
System.out.println(emp);
}
}
运行结果:
Emp [empId=2222, empName=王吉, sex=0, salary=10006.0, birthday=Thu Feb 15 00:00:00 CST 1996, deptId=4]
SqlSession 接口定义的方法:
selectOne(string statement,object param)
泛型方法,参数statement表示使用的查询sql语句,参数param表示需要用户传入的实参,即sql语句绑定的实参