单独使用mybatis

Mybatis整合案例

一、单独使用Mybatis

项目目录结构大致为:

单独使用mybatis

这里有两个UserDao.xml,是为了在mybatis-config.xml,配置映射扫描的使用替换选择

Ⅰ、创建项目

1.1 新建一个Maven项目,直接next

单独使用mybatis

1.2 设置报名、文件所在位置信息等,然后finish

单独使用mybatis

Ⅱ、导入依赖

<dependencies>
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!-- mysql连接驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
        <!--日志 / 可以不用-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
    	<!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

Ⅲ、创建mybatis-config.xml

  • 在Resource目录下新建mybatis-config.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>
    
    <settings>
        <!-- 设置驼峰映射 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- 日志打印 / 可以不用,没导入log4j依赖就不用配置 -->
        <setting name="logImpl" value="LOG4J"/>
    </settings>

    <typeAliases>
        <!-- 开启别名 -->
        <typeAlias type="com.balalaenergy.pojo.User" alias="user"/>
    </typeAliases>

    <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://127.0.0.1:3306/test?characterEncoding=utf-8&amp;autoReconnect=true&amp;allowMutiQueries=true&amp;serverTimezone=Asia/Shanghai"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!--  映射器,需要注意的是,如果配置包扫描映射, -->
    <!--  xml所放的位置一定也是resources下的com.balalaenergy.dao包下 -->
    <!--  也就是一定要和java目录下的目录就够要一致,必须完全一致 -->
    <!--  不然会抛出BindingException异常 -->
    <mappers>
<!--        <package name="com.balalaenergy.dao"/>-->
        <mapper resource="mapper/UserDao.xml"/>
    </mappers>
</configuration>

这里特别说明一下如果配置包扫描,一定要保证resource下的包名与java目录的一直,还有一个小坑,resource目录下创建文件夹的时候不能用“.”去分割包,只能一层一层的单独创建

Ⅳ、配置log4j.properties

在resource目录下创建log4j.properties文件

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=D:\\java\\log\\mybatis-test\\mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=debug, stdout

Ⅴ、新建User实体类、UserDao、UserDao.xml

5.1 User实体类

/**
 * @author :BalalaEnergy
 * @date :Created in 2021/4/10 16:47
 * @description:注意这里没有Getter、Setter方法,是因为使用了Lombok插件,需要导入lombok依赖以及安装插件
 * @modified By:
 */
@Data
public class User implements Serializable {

    private Integer id;
    private String name;
    private Integer age;
    private Integer sex;
}

5.1 UserDao

/**
 * @author :BalalaEnergy
 * @date :Created in 2021/4/10 16:51
 * @description:
 * @modified By:
 */
public interface UserDao {

    /**
     * 添加用户
     * @param user
     */
    void addUser(User user);

    /**
     * 通过用户ID删除用户
     * @param id
     */
    void delUserById(Integer id);

    /**
     * 查询所用用户信息
     * @return
     */
    List<User> findAllUser();
}

5.2 UserDao.xml

<?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.balalaenergy.dao.UserDao">
    <resultMap id="userResult" type="com.balalaenergy.pojo.User">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="name" column="name"/>
        <result property="age" column="age"/>
        <result property="sex" column="sex"/>
    </resultMap>

    <insert id="addUser" parameterType="com.balalaenergy.pojo.User">
        insert into user(name, age, sex) value (#{name}, #{age}, #{sex})
    </insert>

    <delete id="delUserById" parameterType="integer">
        delete from user where id=#{id}
    </delete>

    <select id="findAllUser" resultMap="userResult">
        select * from user;
    </select>
</mapper>

注意:mybatis的mapper文件是通过namespace来与mapper相对应的,一定要保证namespace正确,才能正常使用(这里mapper和dao差不多一个意思,个人习惯而已)

Ⅵ、新建MybatisUtil

/**
 * @author :BalalaEnergy
 * @date :Created in 2021/4/10 21:48
 * @description:使用工厂模式,通过此工具类获取SqlSesion的实例对象
 * @modified By:
 */
public class MybatisUtil {

    private static SqlSessionFactory sqlSessionFactory;
    private static final String resource = "mybatis-config.xml";
    static {
        try {
            InputStream inputStream =  Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 获取sqlSession
     * @return
     */
    public static SqlSession getSession(){
        return sqlSessionFactory.openSession();
    }
}

Ⅶ、创建测试类:TestMybatis

/**
 * @author :BalalaEnergy
 * @date :Created in 2021/4/10 21:28
 * @description:
 * @modified By:
 */
public class TestMybatis {
    @Test
    public void findAllUser(){
            SqlSession sqlSession = MybatisUtil.getSession();
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            List<User> users= userDao.findAllUser();
            System.out.println(users);
            sqlSession.close();
    }
}

Ⅵ、测试结果

单独使用mybatis

Ⅶ、总结

​ 本案例是一个简单的MyBatis的使用案例,没有涉及到复杂的业务逻辑,本文总共写了三个接口,查询所有用户(findAllUser)、通过用户ID删除用户(delUserById)、添加用户(addUser),在测试代码中我只是测试了最简单的一个查询所有用的接口,剩余两个接口大家可以自行进行测试。

​ 注意,添加、修改操作记得要提交事务,也就是加上这一句

sqlSession.commit();

​ 要不然你会发现你操作没什么问题,数据库没什么反应,这让我想起了一个笑话:

夏日炎炎,老师在讲台上兴致勃勃的传道授业,突然发现一女同学在打瞌睡,于是把她叫了起来,怒斥者说到,我在上面拼死拼活,你却在下面一动不动。

  • 后续持续更新spring + mybatis的整合案例
上一篇:Java多线程,哲学家就餐问题


下一篇:Javascript中Closure及其相关概念