MyBatis入门

    科技2024-03-15  93

    文章目录

    MyBatis第一个案例创建项目创建数据库创建配置文件对应的类 测试参考

    MyBatis

    使用MyBatis的意义

    作为一个半自动的持久层框架,MyBatis将sql语句交给开发者去完成,使开发者可以优化自己的SQL语句,自身则完成剩余的部分。

    第一个案例

    创建项目

    在maven中添加如下的依赖:

    这两个分别是MyBatis和jdbc的驱动

    <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency>

    创建数据库

    这是建表的代码:

    CREATE TABLE user( id INT(10) NOT NULL auto_increment PRIMARY KEY, userName VARCHAR(6) NOT NULl, sex CHAR(1) DEFAULT("男"), address VARCHAR(30) )

    创建配置文件

    这个配置文件在官方的说明文档中给的有,想看的点下面的传送门。

    官方的文档中也有所有的配置的说明,想学的话直接看文档也行。

    传送门

    这个是全局的配置文件,在这个里面配置了连接池、事务、以及sql映射文件的链接。

    如果是使用配置文件的形式实现,在mappers里面写上对应的配置文件的地址,如果是使用注解实现了,那么写的就换成对应的类。

    <?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> <environments default="mysql"> <environment id="mysql"> <!-- 配置事务--> <transactionManager type="JDBC"/> <!-- 配置连接池--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis_demo"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!-- 配置映射文件位置--> <mappers> <!-- <mapper class="com.modevil.dao.UserDao"/>--> <mapper resource="com/modevil/dao/UserDao.xml"/> </mappers> </configuration>

    以下sql映射文件的代码,这个部分可以使用注解来代替。

    一般情况这个文件中 namespace和对应类的全类名是相同的 每一个id对应类中的一个方法

    <?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.modevil.dao.UserDao"> <select id="findAll" resultType="com.modevil.domain.User"> SELECT * FROM user </select> </mapper>

    对应的类

    然后就是对应的Dao接口了,这个接口不是必要的,但是推荐使用这种方法

    如果是使用配置文件的形式,在这个类中写方法,然后在配置文件中写对应的sql语句。

    如果是使用注解的形式,只需要在方法名上面添加一个注解@Select()在这个里面写上sql语句即可。

    package com.modevil.dao; import com.modevil.domain.User; import org.apache.ibatis.annotations.Select; import java.util.List; /** * @author modev * @date 2020/9/8 16:49 */ public interface UserDao { /** * 查询所有用户 * @return 返回用户列表 */ // @Select("SELECT * FROM user;") List<User> findAll(); }

    测试

    一般有以下的几步:

    通过映射文件创建SqlSessionFactory通过SqlSessionFactory创建SqlSession使用SqlSession获取对应的代理类通过代理类进行各种操作

    其中

    创建SqlSessionFactory也可以通过对应的Class类来创建,具体的方法可以看官方的文档。SqlSession不止可以获取代理类,也可以直接执行配置文件中的sql语句,然后返回查询结果SqlSession在使用完之后要进行关闭,一般都放在finally中,保证一定会执行。

    这个是一个简单的示例:

    @Test public void test2() throws IOException { String resource = "SqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); try { List<Object> list = sqlSession.selectList("com.modevil.dao.UserDao.findAll"); System.out.println(list); }finally { sqlSession.close(); inputStream.close(); } }

    在这个示例中,没有获取代理类,直接通过配置文件的全类名加id执行,获取返回的数据。

    @Test public void test1() throws IOException { String resource = "SqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); try { UserDao userDao = sqlSession.getMapper(UserDao.class); System.out.println(userDao.getAllUser()); }finally { sqlSession.close(); inputStream.close(); } }

    参考

    官方的说明文档黑马程序员的MyBatis教程尚硅谷的MyBatis教程
    Processed: 0.009, SQL: 8