Blog of CodeJELLOW’S ENGINEERING NOTES
← 返回文章

Mybatis基本使用

IDEA使用Maven配置Mybatis

本文目录 ⌄

    IDEA使用Maven配置Mybatis

    配置数据库

    首先下载MySQL,我这里是最新版8.0.20

    在Maven中根据你的Sql版本引入两个包,一个是MyBatis,一个是Sql驱动。注意:这两个包的版本一定要与你的mybatis和sql相同

    TEXT
       <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.20</version>
        </dependency>

    IDEA已经集成了数据库管理系统,我们可以不使用Navicat Premium 了。点击右侧数据库,选择MySQL。

    添加Maven导入的Driver包,找不到的话可以在Maven中右键复制路径。

    点击Driver上面的Project Data Sources中新建的mysql。输入账号密码,点击Test Connection。配置成功的话会有√。

    新建一个模式,我命名为schema_person。

    再右键这个schema,建立一个表。再右键这个表建立三列数据

    全部完成后结构是这样的

    插入一条数据

    双击表名,点击加号添加一条数据

    配置Mybatis

    新建一个maven项目,添加代码模板,模板中的代码复制后别忘更改Extension拓展名为xml,点击Apply。

    复制此段代码模板,下面详细讲解

    TEXT
    <?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>
    <typeAliases>
    <package name="${packagename}"/>  <!--在包中寻找所需的类,Mapper中不用写全称-->
    </typeAliases>
    <environments default="development">
    <environment id="development">
    <transactionManager type="JDBC"/>
    <dataSource type="POOLED">
    <!--  mysql的驱动,这里注意JDK1.6以上使用cj版本的驱动-->
    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
    <!-- schema_person是模式名,cj版本的驱动必须提前设置好时区-->
    <property name="url" value="jdbc:mysql://localhost:3306/${schema}?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
    </dataSource>
    </environment>
    </environments>
    <!--   在mapper文件中寻找语句映射-->
    <mappers>
    <mapper resource="${Mapper}"/>
    </mappers>
    </configuration>
    参数讲解:
    1. environment:你可以创建多个环境,比如测试环境,运行环境。通过defauft或者Reader切换。
    2. dataSource type:
      1. POOLED:连接池方式,每次从链接池中取出链接执行。不需要打开和关闭数据库。
      2. UNPOOLED:JDBC方式,不推荐。每次需要重新打开数据库,很消耗性能。
      3. JNDI:TomCat自带连接池
    3. transactionManager:事务提交方式
      1. JDBC:JDBC方式手动提交事务
      2. MANAGED: 事务由其它组件去托管(spring,jboss)。默认使用完成连接后自动关闭链接。

    在resource文件夹中建立名为conf的Mybatis配置文件,为什么一定要放在resources文件夹中呢?

    IDEA的maven项目中,默认源代码目录下(src/main/java目录)的xml等资源文件并不会在编译的时候一块打包进classes文件夹,而是直接舍弃掉。如果使用的是Eclipse,Eclipse的src目录下的xml等资源文件在编译的时候会自动打包进输出到classes文件夹。maven工具默认在编译的时候,会将resources文件夹中的资源文件一块打包进classes目录中。

    在resources中建立xxxMapper.xml映射文件,这里我们写入一条查询语句。

    注意由于是基本类型。传入参数括号中的占位符可以不是id。

    在conf中映射文件定位,这句就是告诉sql执行的语句在哪。

    测试SQL

    新建一个Person类,生成简单java类。

    TEXT
    public class Person {
        int id;
        String name;
        int age;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public Person(int id, String name, int age) {
            this.id = id;
            this.name = name;
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    

    再新建一个名为TestMybatis类

    TEXT
    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 java.io.IOException;
    import java.io.Reader;
    
    public class TestMybatis {
    
        public static void main(String[] args) throws IOException {
            //加载mybatis配置文件
           Reader reader= Resources.getResourceAsReader("conf.xml");//得到配置文件
            SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(reader);
            SqlSession sqlSession = sqlSessionFactory.openSession(); //得到session
            String statement="com.cztcode.mybatis.PersonMapper.queryPersonById"; //执行的语句
            Person person=sqlSession.selectOne(statement,1); //第一个参数
            System.out.println(person.toString());
            sqlSession.close();
        }
    }
    

    输出结果

    这样实现的方式是基础方式,除此之外CRUD的代码为

    和上面的方式是类似的,这里不再详述了。

    TEXT
    <?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.cztcode.mybatis.PersonMapper">
        <select id="queryPersonById" parameterType="int" resultType="Person">
        select * from Person where id = #{id}
      </select>
        <insert id="addPerson" parameterType="Person">
        insert into person(id,name,age) values (#{id},#{name},#{age})
        </insert>
        <update id="updatePerson" parameterType="Person">
            update person set id= #{id}, name=#{name},age=#{age} where id=#{id}
        </update>
        <delete id="deletePersonById" parameterType="int">
            delete from person where id=#{id}
        </delete>
        <select id="queryAllPerson" parameterType="int" resultType="Person">
            select * from Person
        </select>
    </mapper>
    TEXT
    
            String statement01="queryPersonById"; //执行的语句
            Person person01=sqlSession.selectOne(statement01,1); //第一个参数
            System.out.println(person01.toString());
    
            String statement02="com.cztcode.mybatis.PersonMapper.queryAllPerson";
            List<Person> person02=  sqlSession.selectList(statement02);
            for(Person it:person02){
                System.out.println(it.toString());
            }
    
            Person person =new Person(3,"Shi",20);
            String statement03 ="addPerson";
            int count=sqlSession.insert(statement03,person);
            sqlSession.commit();
            System.out.println(count);
    
            String statement04="deletePersonById";
            sqlSession.delete(statement04,3);
            sqlSession.commit();
    
                Person person =new Person(2,"Tao",23);
                String statement05= "updatePerson";
                sqlSession.update(statement05,person);
                sqlSession.commit();
    

    通过 RSS 订阅更新 →