0
点赞
收藏
分享

微信扫一扫

mybatis复习

芷兮离离 2022-03-11 阅读 54

mybatis

  • 使用mybatis
  • 在项目中引入
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.2</version>
</dependency>

  • 持久层
    Dao层、Service层、Controller层
    完成持久化工作的代码块
    层的界限十分明显

在项目中使用mybatis

  • 创建数据库
  • 在项目中引入依赖
<!-- 导入依赖 -->
<dependencies>
	<!-- mysql驱动 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.47</version>
	</dependency>
	<!-- mybatis -->
	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.5.2</version>
	</dependency>
	<!-- junit -->
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.12</version>
		<scope>test</scope>
	</dependency>
</dependencies>

  • 在项目模块中创建mybatis-config核心配置文件
<?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核心配置文件 -->
<configuration>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

<!--    <mappers>-->
<!--        <mapper resource="org/mybatis/example/BlogMapper.xml"/>-->
<!--    </mappers>-->
</configuration>

  • 编写mybatis工具类
//sqlSessionFactory --> sqlSession
public class MybatisUtils {

    //提升作用域
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            //使用Mybatis第一步:获取sqlSessionFactory对象
            String resource = "org/mybatis/example/mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
    //sqlSession 完全包含了面向数据库执行SQL 命令所需的所有方法

    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }

}

  • 根据数据库字段创建pojo实体类
  • 创建接口//Dao接口 public interface UserDao { List<User> getUserList(); }
  • 创建接口实现类(用mapper代替接口Impl)
<?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接口 -->
<mapper namespace="com.fj.dao.UserDao">
    <!-- select查询语句 -->
    <select id="getUserList" resultType="com.fj.pojo.User">
        select * from mybatis.user;
    </select>
</mapper>

CRUD

@Test
public void getUserByID(){
	SqlSession sqlSession = MybatisUtils.getSqlSession();

	UserMapper mapper = sqlSession.getMapper(UserMapper.class);
	User user = mapper.getUserByID(1);
	System.out.println(user);

	sqlSession.close();
}

//增删改需要提交事务
@Test
public void addUser(){
	SqlSession sqlSession = MybatisUtils.getSqlSession();

	UserMapper mapper = sqlSession.getMapper(UserMapper.class);
	User user = new User(4, "王五", "1324214");
	int result = mapper.addUser(user);
	if (result > 0){
		System.out.println("插入成功!");
	}

	//提交事务
	sqlSession.commit();

	sqlSession.close();
}

@Test
public void updateUser(){
	SqlSession sqlSession = MybatisUtils.getSqlSession();

	UserMapper mapper = sqlSession.getMapper(UserMapper.class);
	User user = new User(4, "旺财", "14432434");
	mapper.updateUser(user);

	sqlSession.commit();

	sqlSession.close();
}

@Test
public void deleteUser(){
	SqlSession sqlSession = MybatisUtils.getSqlSession();

	UserMapper mapper = sqlSession.getMapper(UserMapper.class);
	mapper.deleteUser(4);

	sqlSession.commit();

	sqlSession.close();
}

rud需要提交事务

使用注解开发

在接口中使用注解,然后在mapper中用mapper绑定接口,进行测试、
在这里插入图片描述
面试题:#{} ${}的区别

多对一处理

关联 :多对一处理,association

  • 按照查询嵌套处理
    1、先查询多对象(学生类)的属性,复杂属性通过结果集映射查询
<!--
		javaType:把SQL语句查询出来的结果集,封装给某个类的对象(可省略)
		select:下一条要执行的SQL语句
		property:注入给实体类的某个属性
		上一次的查询结果集中,用哪些值作为条件去执行下一条SQL语句
	-->
	<association property="teacher" column="tid" 
	javaType="Teacher" select="getTeacher"/>

@Data
public class Student {
    private int id;
    private String name;

    //**学生需要关联一个老师**
    private Teacher teacher;
}

  • 按照查询嵌套处理
<!-- 按照结果嵌套查询 -->
<select id="getStudent2" resultMap="StudentTeacher2">
	select s.id sid, s.name sname, t.name tname
	from student s, teacher t
	where s.tid = t.id
</select>
    
<resultMap id="StudentTeacher2" type="Student">
	<result property="id" column="sid"/>
	<result property="name" column="sname"/>
	<association property="teacher" javaType="Teacher">
		<result property="name" column="tname"/>
	</association>
</resultMap>

javaType直接用结果,然后再association里面添加result<result property="name" column="tname"/>

一对多

集合:老师的属性里面是学生

@Data
public class Teacher {
    private int id;
    private String name;

    //一个老师拥有多个学生
    private List<Student> students;

}

  • 总结:javaType用来指定实体类中属性的类型
    ofType用来指定映射到List或者集合中的pojo类型,泛型中的约束条件

后面缓存、动态sql

举报

相关推荐

0 条评论