Mybatis是SSM中的最后一个M
作用:简化JDBC和能够更好的完成ORM(对象关系的映射)
主要构成:核心配置文件(mybatis-config.xml),映射文件(类名.xml)
主要有两种开发方式:注解开发和接口开发
开发过程:测试类根据方法去访问接口类中的方法,接口类中的方法会根据对应映射文件中namespace和id去执行SQL语句,执行完的SQL语句会自动ORM并返回数据。
ORM:将数据库中的数据自动赋值给对应pojo类中的对应属性值保存
接口开发的基本案例:
mybatis-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">
<!-- mybatis的核心配置文件 -->
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases><!--别名-->
<typeAlias type="cn.tedu.pojo.User" alias="User"></typeAlias>
</typeAliases>
<environments default="test">
<environment id="test">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatisdb?characterEncoding=utf8&serverTimezone=Asia/Shanghai" />
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="userInfoMapper.xml"></mapper>
</mappers>
</configuration>
映射文件
<?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="cn.tedu.dao.UserInfo">
<resultMap autoMapping="true" id="all" type="cn.tedu.pojo.User">
<!-- <result column="user_name" property="userName"></result>-->
<!-- <result column="user_addr" property="userAddr"></result>-->
<!-- <result column="user_age" property="userAge"></result>-->
</resultMap>
<select id="getAll" resultMap="all"><!--通常情况下使用resultType,若属性值与字段名不匹配时,使用resultMap-->
select * from user_info
</select>
</mapper>
实体类(pojo)
package cn.tedu.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class User {
private Integer id;
private String userName;
private String userAddr;
private String userAge;
}
接口
package cn.tedu.dao;
import cn.tedu.pojo.User;
import java.util.List;
public interface UserInfo {
List<User> getAll();
}
测试类
package cn.tedu.test;
import cn.tedu.dao.UserInfo;
import cn.tedu.pojo.User;
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 org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class TestUser {
@Test
public void all() throws IOException {
InputStream in =
Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory =
new SqlSessionFactoryBuilder().build(in);
//设置为true会自动提交事务
SqlSession session = factory.openSession(true);
UserInfo mapper = session.getMapper(UserInfo.class);
List<User> list = mapper.getAll();
for (User u :list) {
System.out.println(u);
}
}
}