一、引入依赖
1、Maven Repository搜索mybatis
本文使用3.5.3版本。
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
2、引入MySQL驱动包,本文使用8.0版本MySQL数据库
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
二、mybatis配置
1、核心配置文件
在resources下创建mybatis-config.xml文件,用于创建SqlSessionFactory对象,参考mybatis官方介绍
<?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="development">
<!--8.0版本数据库链接配置如下-->
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true"/>
<property name="username" value="root"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<environment id="product">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="root"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--配置Mapper地址,例如:xxx/xxx/xxx/mapper.xml-->
<mapper resource="${mapper}"
</mappers>
</configuration>
三、使用
1、获取SqlSession
封装获取SqlSession的工具类
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
//静态代码块,类加载的时候执行一次
static {
String resource = "mybatis-config.xml";
InputStream is = null;
try {
is = Resources.getResourceAsStream(resource);
sqlSessionFactory =new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
public static void close(SqlSession sqlSession){
if (sqlSession!=null) {
sqlSession.close();
}
}
}
2、dao接口
public interface UserDAO {
int save(User user);
int update(User user);
int delete(int id);
List<User> queryAll();
}
3、mapper配置文件
<?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绑定dao接口-->
<mapper namespace="UserDAO">
<!--
1、id与dao接口中方法保持一致
2、parameterType入参类型
3、keyProperty将id赋值给入参user的id
4、useGeneratedKeys主键自增
5、#{param}表示user对象param的值
-->
<insert id="save" parameterType="User" keyProperty="id" useGeneratedKeys="true">
insert into t_user values (#{id},#{name},#{age})
</insert>
<!--通过id更新数据-->
<update id="update" parameterType="User">
update t_user
<set>
<!-- set标签可以动态去除赋值语句前后多余的逗号 -->
<if test="name!=null and name!=''">
name = #{name},
</if>
<if test="age !=0">
age = #{age}
</if>
</set>
where id = #{id}
</update>
<delete id="delete" parameterType="Integer">
delete from t_user where id = #{id}
</delete>
<!-- 抽取公共sql语句 -->
<sql id="queryUser">
select id,name,age from t_user
</sql>
<!--resultType返回值类型,如果返回多条数据,mubatis会自动封装为List<User>-->
<select id="queryAll" resultType="User">
<!--引入sql语句-->
<include refid="queryUser"/>
</select>
</mapper>
4、在mybatis-config.xml文件注册mapper.xml
<mappers>
<mapper resource="xxx/xxx/xxxx/UserMapper.xml"/>
<!--注册其他mapper-->
<mapper resource="xxx/xxx/xxxxx/xxxx.xml"/>
</mappers>
5、测试增删改查
SqlSession sqlSession = null;
try {
sqlSession = MybatisUtil.getSqlSession();
UserDAO userDAO = sqlSession.getMapper(UserDAO.class);
//增
User user =new User();
user.setName("小明");
user.setAge(10);
int num = userDAO.save(user);
//改
User user =new User();
user.setId(1);
user.setName("小黑");
user.setAge(15);
int num = userDAO.update(user);
//查
List<User> list = userDAO.queryAll();
//删
userDAO.delete(1);
//执行commit,才会写入数据库
sqlSession.commit();
} catch (Exception e) {
sqlSession.rollback();
e.printStackTrace();
} finally {
MybatisUtil.close(sqlSession);
}
三、resultType和resultMap区别
resultType返回简单对象,即对象中不含有对象;resultMap返回复杂对象,例如A对象中含有B对象。
1、resultMap的使用
对象A
private int id;
private String name;
private int age;
private B b;
对象B
private int id;
private String cardNo;
private String address;
mapper.xml
<!--id唯一标识-->
<resultMap id="queryMap" type="A">
<!--id为主键,其他使用result标签-->
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<!--
1、property A中B对象的属性名
2、返回是对象使用association
3、返回是集合使用collection
-->
<association property="b" javaType="B">
<id column="iid" property="id"/>
<result column="icardNo" property="cardNo"/>
<result column="address" property="address"/>
</association>
</resultMap>
<select id="queryAll" resultMap="queryMap">
</select>