mybatis是什么:
mybatis是一套orm框架,实现了对jdbc的轻量级封装,能够实现动态SQL拼接,结果集解析。
简单来说:你不需要再写jdbc连接和dao实现了。
什么是rom?
对象-关系映射(Object/Relation Mapping),一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
前置技能:
Java、JDBC 、mySQL
Getting Started:
1、导入mybatis核心jar包、mysql驱动包
2、在数据库创建一个员工表(staff),并创建对应的Java类
tb_staff 建表信息
CREATE TABLE `tb_staff` (
`uid` int(4) NOT NULL COMMENT '员工Id',
`uname` char(7) NOT NULL DEFAULT 'staff' COMMENT '员工用户名',
`pwd` char(7) NOT NULL DEFAULT '123' COMMENT '员工密码',
`did` tinyint(2) NOT NULL DEFAULT '1' COMMENT '所属部门编号',
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
tb_staff 表
Staff.java
public class Staff {
//员工账号id 用户名 密码 所属部门id
private Integer uid;
private String uname;
private String pwd;
private Integer did;
}
3、创建mybatis核心配置xml
mybatis-configs.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>
<!-- 环境,可以配置多个。 default:默认采用哪个环境 -->
<environments default="test">
<environment id="test">
<!-- 事务管理器 -->
<transactionManager type="JDBC" />
<!-- 数据源,池类型的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/database" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!--使用路径引入对象映射配置文件 可以引入多个 -->
<mappers>
<mapper resource="com/java/dao/staff-mapper.xml"/>
<mapper resource="com/java/dao/department-mapper.xml"/>
</mappers>
</configuration>
4、为 Staff 类创建对应的dao
IStaffDao.java
public interface IStaffDao {
//根据需求写 查 增 删 改
Staff selectById(int id);
List<Staff> selectAll();
int insert(Staff staff);
int delete(int uid);
int update(Staff staff);
}
5、创建mapper映射文件
staff-mapper.xml
映射文件中每一个insert、delete、update、select标签对应dao中的一个方法。
<?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:对应IStaffDao接口的全路径-->
<mapper namespace="com.java.dao.IStaffDao">
<!-- 根据id查询
id: 对应IStaffDao中的方法名
resultType: 对应selectById()方法的返回类型(Staff)
parameterType: 对应selectById()方法的参数类型
(resultType、parameterType 如果不是Java类型内建的相应的类型,需要写全路径名)
#{对应staff对象的属性名} 如果sql语句参数只有一个,可以填任意
-->
<select id="selectById" resultType="com.java.entity.Staff" parameterType="int">
SELECT* FROM tb_staff WHERE uid = #{uid}
</select>
<!-- 查询方法
id: 对应IStaffDao中的方法名
resultType: 如果结果类型为List,写List中对象的类型(Staff)
parameterType: 没有就不写
-->
<select id="selectAll" resultType="com.java.entity.Staff">
SELECT* FROM tb_staff
</select>
<!-- 新增方法
id: 对应IStaffDao中的方法名
resultType: 增、删、改 返回结果为 受影响的行数
parameterType: 对应insert()方法的参数类型
-->
<insert id="insert" parameterType="com.java.entity.Staff">
INSERT INTO tb_user (uid,uname,pwd,did) VALUES
(#{uid},#{uname},#{pwd},#{did});
</insert>
<!-- 修改方法
id: 对应IStaffDao中的方法名
resultType: 增、删、改返回结果为 受影响的行数
parameterType: 对应update()方法的参数类型
#{对应staff对象的属性名}
-->
<update id="update" parameterType="com.java.entity.Staff">
UPDATE tb_staff
<!-- 生成set关键字,并忽略最后的逗号-->
<set>
<!-- 如果if标签test的判断为true,添加此段sql表达式-->
<if test="uname!=null">uname= #{uname},</if>
<if test="pwd!=null">pwd= #{pwd},</if>
<if test="did!=null">name = #{did},</if>
</set>
WHERE uid = #{uid}
</update>
<!-- 删除方法
id: 对应IStaffDao中的方法名
resultType: 增、删、改返回结果为 受影响的行数
parameterType: 对应delete()方法的参数类型
#{对应staff对象的属性名}
-->
<delete id="delete" parameterType="int">
DELETE FROM tb_staff WHERE uid = #{uid}
</delete>
</mapper>
6、使用
Test.java
public class Test{
public static void main(String[] args) {
//读取src文件夹下的xml文件 使用xml配置文件创建 SqlSession工厂对象
InputStream in=Test.class.getClassLoader().getResourceAsStream("mybatis-configs.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
// 得到数据库会话对象
SqlSession session=factory.openSession();
//得到dao的实现类对象
//我们不需要关心其实现,只要xml配置正确,mybatis自己生成实现类
IStaffDao dao=session.getMapper(IStaffDao.class);
//使用dao的增删改查方法
//我们不需要关心其实现,只要xml配置正确,mybatis自己会实现这些方法
List<Staff> list=dao.selectAll();
Staff staff=dao.selectById(1001);
staff.setUid("1002");
staff.setUname("admin");
staff.setPwd("123456");
int result=dao.delete(1001);
dao.update(staff);
//提交修改
session.commit();
//关闭连接
session.close();
}
}
*7、结束
看到这里,我们已经使用mybatis完成了数据库连接、实现dao和基本的增删改查,对mybatis有了初步的认识。
但这些只是mybatis的功能里最基础的部分,想要熟练mybatis还是需要研读官方文档,并多加练习。
写这篇博文的目的是为了帮助想学习mybatis的同学进行一个快速入门,我一直认为,学习一门技术的第一步都应该是Getting Started,完成第一个实例,有基本的概念,再去学习会容易许多。