Mybatis第一篇【Mybatis入门】

快速入门

步骤:

1. 导入相关jar包

  • mybatis-3.5.4.jar
  • commons-logging-1.2.jar
  • log4j-1.2.12.jar
  • cglib-2.2.5.jar
  • asm-3.3.1.jar
  • mysql-connector-java-8.0.19.jar

2. 配置mybatis.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">


<configuration>

    <properties resource="db.properties"></properties>

    <!-- 开启驼峰匹配 -->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <!-- 使用扫描包,扫描指定包下的所有类,扫描之后的别名就是类名(不区分大小写),建议使用的时候和类名一致。 -->
    <typeAliases>
        <package name="com.example.demo.entity" />
    </typeAliases>


    <environments default="mysql_development">
        <environment id="mysql_development">
            <transactionManager type="jdbc"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>

        <environment id="oracle_development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${oracle.driver}"/>
                <property name="url" value="${oracle.url}"/>
                <property name="username" value="${oracle.username}"/>
                <property name="password" value="${oracle.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- 配置关系映射文件路径 -->
        <mapper resource="Mapper/UserMapper.xml"/>
    </mappers>

</configuration>

起别名:

<typeAliases>
    <!--type:实体类的全类名。alias:别名,通常首字母大写-->
    <!--<typeAlias type="com.example.demo.entity.User" alias="User"/>-->
    <package name="com.example.demo.entity"/>
</typeAliases>

配置映射文件的方法:

  1. <mapper resource="mapper/UserMapper.xml"/>
  2. <package name="com.example.demo.mapper"/> 包扫描的方式,必须使用注解方式,即在接口方法上使用注解,如@Select("select * from tb_user ")
  3. <mapper class="com.example.demo.mapper.UserMapper"/> 要求:mapper.xml文件和mapper接口的名字相同,且在同一包下(如果使用注解的话,mapper.xml的命名空间要和mapper接口的全类名相同)
  4. <mapper url="file:///F:/MyProjects/mybatis2/src/main/resources/com/example/demo/mapper/UserMapper.xml"/>

3. 创建数据库配置文件

mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
mysql.username=root
mysql.password=12345678

4. 配置log4j.properties

log4j.rootLogger=DEBUG,A1
log4j.logger.org.apache=DEBUG
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n

5. 创建实体类


@Data
public class User implements Serializable {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private String sex;

    public User(Integer id, String username, String password, Integer age, String sex) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.age = age;
        this.sex = sex;
    }
}

6. 编写mapper接口

可以采用注解或xml的方式

public interface UserMapper {
    int insert(User user);

    @Select("select * from user")
    List<User> select();
}

7. 创建关系映射文件

<?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.demo.mapper.UserMapper">
    <!-- sql片段 -->
    <sql id="userSql">
		id,
		username,
		password,
		age,
		sex
    </sql>

    <!-- resultMap标签:实体类和表的映射
         type属性:表示实体全路径名,可起别名
         id属性:为实体与表的映射取一个任意的唯一的名字
    -->
    <resultMap type="User" id="UserMap">
        <!-- id标签:映射主键属性
             result标签:映射非主键属性
             property属性:实体的属性名
             column属性:表的字段名
        -->
        <id property="id" column="id"/>
        <result property="username" column="username"/>
        <result property="password" column="password"/>
        <result property="age" column="age"/>
        <result property="sex" column="sex"/>
    </resultMap>

    <insert id="insert" parameterType="User">
        insert into user (id,username,password,age,sex) values (#{id},#{username},#{password},#{age},#{sex})
    </insert>

</mapper>

8. 创建Mybatis工具类

public class MybatisUtil {
    private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<>();
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            //加载位于src/mybatis.xml配置文件
            Reader resourceAsReader = Resources.getResourceAsReader("mybatis.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsReader);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private MybatisUtil(){}
    //获取sqlSession
    public static SqlSession getSqlSession() {
        SqlSession sqlSession = threadLocal.get();
        if (sqlSession == null)
            sqlSession=sqlSessionFactory.openSession();
            threadLocal.set(sqlSession);
        return sqlSession;
    }
    //获取mapper
    public static <T> T getMapper(Class<T> clazz){
        return getSqlSession().getMapper(clazz);
    }
    //关闭sqlSession
    public static void close() {
        SqlSession sqlSession = threadLocal.get();
        if (sqlSession != null)
            sqlSession.close();
        //分开当前线程与SqlSession对象的关系,目的是让GC尽早回收
        threadLocal.remove();
    }
}

9. 测试

    public void test(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> select = mapper.select();
        //开启自动提交
        sqlSession.commit();
        for (User user : select) {
            System.out.println(user);
        }
        sqlSession.close();
        MybatisUtil.close();
    }

结果:

测试结果

posted @ 2020-04-11 23:57  幻竹  阅读(132)  评论(0)    收藏  举报