- 添加MyBatis的坐标
在pom.xml文件中加坐标
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
- 添加user数据表
- 创建user数据表对应的类
- 编写映射文件UserMapper.xml
该文件内主要配置sql语句
<?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">
<!--此映射文件主要配置sql语句-->
<mapper namespace="userMapper">
<!--resultType为查询结果封装的类型,即封装成user对象;resultType使用别名user-->
<select id="findAll" resultType="user">
select * from user;
</select>
<!-- 插入数据-->
<insert id="save" parameterType="com.itheima.domain.User">
insert into user values(#{id}, #{username}, #{password})
</insert>
<!-- 修改数据-->
<update id="update" parameterType="com.itheima.domain.User">
update user set username=#{username}, password=#{password} where id=#{id}
</update>
<!-- 删除操作-->
<update id="delete" parameterType="com.itheima.domain.User">
delete from user where id=#{id}
</update>
</mapper>
- 配置核心文件SqlMapConfig.xml
主要配置数据源的环境,指明链接的数据库路径和账号信息
此外还得加载之前编写的映射文件UserMapper.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>
<!--加载jdbc.properties文件,properties文件抽取除了数据源信息-->
<properties resource="jdbc.properties"></properties>
<!--自定义别名,在UserMapper.xml中可以直接使用别名user-->
<typeAliases>
<typeAlias type="com.itheima.domain.User" alias="user"></typeAlias>
</typeAliases>
<!--配置数据源的环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<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>
<!--加载映射文件-->
<mappers>
<mapper resource="com.itheima.mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
jdbc.properties文件内容:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root
- 测试代码的编写
配置核心文件;获取会话工厂对象;获取会话对象;由会话对象执行sql操作
注:当数据库的信息需要更新时,sqlSession需要执行commit()方法提交事务,或者将openSession()的参数设置为true将自动提交事务。
package com.itheima.test;
import com.itheima.domain.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.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MyBatisTest {
@Test
//查询操作
public void test1() throws IOException {
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行在UserMapper映射文件中定义的sql操作;参数:namespace+id
List<User> userList = sqlSession.selectList("userMapper.findAll");
//打印输出
System.out.println(userList);
//释放资源
sqlSession.close();
}
@Test
//插入操作
public void test2() throws IOException {
//模拟user对象
User user = new User();
user.setUsername("sda");
user.setPassword("abc");
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行在UserMapper映射文件中定义的sql操作;参数:namespace+id
sqlSession.insert("userMapper.save", user);
//mybatis执行更新操作,需要提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
@Test
//修改操作
public void test3() throws IOException {
//模拟user对象
User user = new User();
user.setId(7);
user.setUsername("tom");
user.setPassword("123");
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行在UserMapper映射文件中定义的sql操作;参数:namespace+id
sqlSession.update("userMapper.update", user);
//mybatis执行更新操作,需要提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
@Test
//删除操作
public void test4() throws IOException {
//模拟user对象
User user = new User();
user.setId(7);
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行在UserMapper映射文件中定义的sql操作;参数:namespace+id
sqlSession.delete("userMapper.delete", user);
//mybatis执行更新操作,需要提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
}
MyBatis代理开发方式实现Dao层
只要保证UserMapper接口和映射xml文件中接口的全限定名、方法名、参数类型和返回值类型一致即可。
动态sql的使用(重点掌握if和where的使用)和sql抽取:
<mapper namespace="com.itheima.mapper.UserMapper">
<!--sql抽取-->
<sql id="selectUser">select * from user</sql>
<select id="findByCondition" parameterType="user" resultType="user">
<include refid="selectUser"/>
<where>
<if test="id!=0">
and id=#{id}
</if>
<if test="username!=null">
and username=#{username}
</if>
<if test="password!=null">
and password=#{password}
</if>
</where>
</select>
<!-- 下列sql的效果是select * from user where id in(1,2,3)-->
<select id="findByIds" resultType="user" parameterType="list">
<include refid="selectUser"/>
<where>
<foreach collection="list" open="id in (" close=")" item="id" separator=",">
#{id}
</foreach>
</where>
</select>
</mapper>