java之 MyBatis(一)

0x01、Mybatis配置

1:创建maven工程并导入坐标

2:创建实体类和dao的接口

3:创建Mybatis的主配置文件(名字随意)
SqlMapConifg.xml

4:创建映射配置文件UserDao.xml
  • 1、导入坐标

    mysql mysql-connector-java 5.1.47 org.mybatis mybatis 3.5.3
  • 2、创建User实体类

public class User implements Serializable{
    private int uid; //用户id
    private String username;// 用户姓名
    private String sex;// 性别
    private Date birthday;// 生日
    private String address;// 地址
	
}
  • 3、创建 UserDao 接口
    • UserDao 接口就是我们的持久层接口(也可以写成 UserMapper) .我们就写成UserDao ,具体代码如下:
public interface UserDao {
    public List<User> findAll();
}
  • 4、创建 UserDao.xml 映射文件

注意:

  1. 映射配置文件存储的路径在resources里面,要和对应的Dao接口的路径保持一致
  2. 映射配置文件的文件名必须和Dao接口名保持一致
  3. 一定要引入约束文件

<?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属性: 接口类的全限定名-->

<mapper namespace="com.itheima.day01.dao.UserDao">
    <!--
        每一个子标签,就对应Dao接口中的一个方法
            查询方法就对应select标签
            添加方法就对应insert标签
            删除方法就对应delete标签
            修改方法就对应update标签

        标签的id就对应方法的名字

        标签的parameterType就对应方法的参数类型

        标签的resultType(只有select标签才有)就对应方法的返回值类型,如果返回值类型是List,那么
        resultType就是List的泛型类型
    -->
    <select id="findAll" resultType="com.itheima.day01.Pojo.User">
        select * from t_user
    </select>
</mapper>
  • 5、创建 SqlMapConfig.xml 配置文件(核心配置文件)

注意事项

  1. 存放路径必须是resources的根路径
  2. 配置文件的名字,随便写
  3. 一定要引入约束文件
<?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="dev">
        <environment id="dev">
            <!--配置事务,MyBatis事务用的是jdbc-->
            <transactionManager type="JDBC"/>
            <!--配置连接池, POOLED:使用连接池(mybatis内置的); UNPOOLED:不使用连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>

        <environment id="test">
            <!--配置事务,MyBatis事务用的是jdbc-->
            <transactionManager type="JDBC"/>
            <!--配置连接池, POOLED:使用连接池(mybatis内置的); UNPOOLED:不使用连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/库名?characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!--引入映射文件; resource属性: 映射文件的路径-->
        <!-- 类似:com/itheima/dao/UserDao.xml  -->
        <mapper resource="com/itheima/day01/dao/Config.xml"/>
    </mappers>
</configuration>

代码实例:

package com.itheima;

import com.itheima.dao.UserDao;
import com.itheima.pojo.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.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

public class Demo {
    private UserDao userDao;
    private SqlSession sqlSession;
    private InputStream is;

    @Before
    public void init() throws IOException {
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        is = Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactory SessionFactory = sqlSessionFactoryBuilder.build(is);
        sqlSession = SessionFactory.openSession();
        userDao = sqlSession.getMapper(UserDao.class);
    }

    @Test
    public void findAll() throws IOException {
        List<User> userList = userDao.findAll();
        for (User user : userList) {
            System.out.println(user);
        }
    }

//    @Test
//    public void testAddUser(){
//        User user = new User(0, "jay", "男", new Date(), "台湾");
//        userDao.addUser(user);
//    }

    @After
    public void destroy() throws IOException {
        sqlSession.commit();
        sqlSession.close();
        is.close();
    }

}

0x02、Mapper映射接口开发

  1. 存储路径建议和对应的Dao接口保持一致

  2. 文件名建议和对应Dao接口的名字保持一致

  3. 配置文件的根标签的namespace属性必须和对应的Dao接口的全限定名保持一致

  4. 接口中的每一个方法,就对应映射配置文件中的一个标签:

    1. 查询方法,对应select标签
    2. 添加方法,对应insert标签
    3. 删除方法,对应delete标签
    4. 修改方法,对应update标签
  5. 映射配置文件中的标签的id属性,就必须和对应的方法的方法名保持一致

  6. 映射配置文件中的标签的parameterType属性,必须和对应的方法的参数类型(全限定名)保持一致

  1. 映射配置文件中的标签的resultType属性,必须和对应的方法的返回值类型(全限定名)保持一致,但是如果返回值是List则和其泛型保持一致

<?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.itheima.dao.UserDao">
    <select id="findAll" resultType="com.itheima.pojo.User">
        select * from t_user
    </select>

    <insert id="addUser" parameterType="com.itheima.pojo.User" >
        insert into t_user values (null,#{username},#{sex},#{birthday},#{address})
    </insert>

    <delete id="deleteById" parameterType="java.lang.Integer">
        delete from t_user where uid=#{id}
    </delete>

    <update id="updateUser" parameterType="com.itheima.pojo.User">
        update t_user set username=#{username},sex=#{sex},address=#{address} where uid=#{uid}
    </update>
    
    <select id="findById" parameterType="java.lang.Integer" resultType="com.itheima.pojo.User">
        select * from t_user where uid=#{uid}
    </select>
</mapper>

0x03、核心配置文件

  1. 核心配置文件的顺序
  2. properties
  3. typeAliases
  4. Mapper

1、properties

  • jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.user=root
jdbc.password=root
  • 引入到核心配置文件
<configuration>
   <properties resource="jdbc.properties">
    </properties>
    <!--数据源配置-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="UNPOOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.user}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    ....
</configuration>

2、typeAliases(类型别名)

2.1定义单个别名
  • 核心配置文件
<typeAliases>
      <typeAlias type="com.itheima.bean.User" alias="user"></typeAlias>
 </typeAliases>
  • 修改UserDao.xml
<select id="findAll" resultType="user">
    SELECT  * FROM  user
</select>
2.2批量定义别名

使用package定义的别名:就是pojo的类名,大小写都可以

  • 核心配置文件
<typeAliases>
    <package name="com.itheima.bean"/>
</typeAliases>
  • 修改UserDao.xml
<select id="findAll" resultType="user">
         SELECT  * FROM  user
</select>

3、Mapper

3.1方式一:引入映射文件路径
<mappers>
     <mapper resource="com/itheima/dao/UserDao.xml"/>
 </mappers>
3.2方式二:扫描接口
  • 配置单个接口
<mappers>
 	<mapper class="com.itheima.dao.UserDao"></mapper>
</mappers>
  • 批量配置
<mappers>
   <package name="com.itheima.dao"></package>
</mappers>

0x04、注解配置

我们只需要在接口处加一个select的注解就可以了

package com.test.dao;

import com.test.domain.User;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface Userdao {
    @Select("select * from user")
    List<User> findAll();
}

这样我们就可以删除前面创建的userdao.xml文件。

使用注解配配置,还需要修改一下SqlMapConfig.xml的配置
原本的xml配置:

<mappers>
        <mapper resource="com/test/dao/Userdao.xml"/>
    </mappers>

改为:

<mappers>
        <mapper class="com.test.dao.Userdao"/>
    </mappers>

mapper 这里使用注解使用class指定被select注解的接口就完成了。

总结

  1. properties 引入properties文件的
    • 创建properties文件
    • 使用 <properties resource="文件的路径"/>
    • 使用 $
  2. typeAliases(类型别名) 在Dao映射文件里面 直接写类(pojo)的名字, 不需要写类全限定名了
<typeAliases>
    <package name="com.itheima.bean"/>
</typeAliases>
  1. Mapper 引入Dao映射文件的
<mappers>
   <package name="com.itheima.dao"></package>
</mappers>
posted @ 2021-01-26 21:29  0X7e  阅读(161)  评论(0编辑  收藏  举报