用了挺久的mybatis了一直没有做一个系统的学习记录,最近比较清闲就来记录一下
一、介绍
mybatis是一个操作吃就层与数据库打交道的框架。是一个半自动型框架,与之对应的就是hibernate全自动框架。
优点:
1.mybatis支持sql与java代码的分离,写在java代码中则修改时每次都需要重新编译,便于sql管理。
2.连表查询结果便于封装vo,mybatis是一个半自动框架,每一个操作数据库的行为都由自己来编写sql操作数据库,结果返回值便于封装成对象。例如连表查询操作结果可直接封装成对象,hibernate则不支持。
3.灵活,性能消耗小,hibernate每一个vo对象都需要一个xml映射文件,所以无法处理连表查询结果,并且当只需要查询其某几个字段时hibernate是会把所有字段全部查询的,性能消耗较大。
二、永远的helloworld
- 建表sql
CREATE TABLE `employee` (
`id` int(32) NOT NULL AUTO_INCREMENT,
`user_name` varchar(20) DEFAULT NULL,
`gender` varchar(2) DEFAULT NULL,
`email` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
- 新建一个maven工程 source-mybatis
- 导入依赖
<!--mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- 数据库连接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
- 创建vo类与mapper接口
//get set 就不显示了
public class Employee {
private Integer id;
private String userName;
private String gender;
private String email;
}
//mapper 接口
public interface EmployeeMapper {
public Employee selectEmp(int id);
public int saveEmpOne(Employee emp);
}
- 配置文件 mybatis-config.xml 与mapper 接口配置文件
<?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>
<!--数据库连接配置方式2 -->
<properties>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://hadoop202:3306/hymc"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</properties>
<!--数据库连接配置方式3
<properties resource=""/>
<properties url=""/> -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
<!-- 数据库连接配置方式1
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://hadoop202:3306/hymc"/>
<property name="username" value="root"/>
<property name="password" value="root"/> -->
</dataSource>
</environment>
</environments>
<!-- 将我们写好的sql映射文件注册到全局配置文件中 -->
<mappers>
<!-- xml映射配置方式 -->
<mapper resource="mapper/EmployeeMapperXml.xml"/>
</mappers>
</configuration>
mapper接口配置文件:EmployeeMapperXml.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="com.cjy.mybatis.dao.EmployeeMapper">
<resultMap type="com.cjy.mybatis.entity.Employee" id="baseMap">
<id column="id" property="id" />
<result column="user_name" property="userName" />
<result column="gender" property="gender" />
<result column="email" property="email" />
</resultMap>
<parameterMap type="com.cjy.mybatis.entity.Employee" id="parameMap">
<parameter property="userName" resultMap="baseMap"/>
<parameter property="gender" resultMap="baseMap"/>
<parameter property="email" resultMap="baseMap"/>
</parameterMap>
<select id="selectEmp" resultType="com.cjy.mybatis.entity.Employee" parameterType="int">
select id,user_name userName,gender,email,hobbys from employee where id = #{id}
</select>
<insert id="saveEmpOne" parameterMap="parameMap" ><!-- or parameterType="com.cjy.mybatis.entity.Employee" -->
INSERT INTO employee(user_name,gender,email,hobbys)
VALUES(#{userName},#{gender},#{email})
</insert>
</mapper>
- 测试代码
@Test
public void test4() throws IOException{
String resource = "mybatis-config.xml";
InputStream inputStream = null;
inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession openSession = sqlSessionFactory.openSession();
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
Employee employee = mapper.selectEmp(1);
System.out.println(employee);
//Employee [id=1, userName=zhangsan , gender=0, email=zhangsan@163.com]
}
demo地址:
https://github.com/chenjy512/mybatis-demo/tree/master/source-mybatis-01helloworld