美文网首页
在IntelliJ IDEA上使用Maven创建Mybatis项

在IntelliJ IDEA上使用Maven创建Mybatis项

作者: 轻飘飘D | 来源:发表于2019-12-17 23:03 被阅读0次
    1. 点击File---New----project
      選擇Maven--Project SDK 選擇1.8--不勾選 Create from archetype
      -- 最後點擊 Next


      image.png

    在Groupid中填入项目的包名即可(com.xag)。Artifactid 填入項目名(bybatis_sample)


    image.png
    1. 输入项目信息


      image.png
    2. 引入mysql依赖包

    <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.16</version>
    </dependency>
    
    1. 引入 mybatis 依赖包
    <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.2</version>
    </dependency>
    
    1. 引入日志依赖包
    <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.7.28</version>
    </dependency>
    

    7.引入junit依赖

    <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
    </dependency>
    
    1. 准备数据
    创建数据库:
    CREATE DATABASE mybatis_demo;
    
    DROP TABLE IF EXISTS tb_user;
    CREATE TABLE tb_user
     (
    id int auto_increment not null,
    user_name varchar(32) DEFAULT NULL,
    password varchar(32) DEFAULT NULL,
    name varchar(32) DEFAULT NULL,
    age int(10) DEFAULT NULL,
    sex int(2) DEFAULT NULL,
    birthday date DEFAULT NULL,
    created datetime DEFAULT NULL,
    updated datetime DEFAULT NULL,
    primary  key (id)
    );
    
    alter table tb_user auto_increment=100;
    
    插入数据:
    INSERT INTO tb_user (user_name, password, name, age, sex, birthday, created, updated) VALUES ( 'zpc', '123456', '鹏程', '22', '1', '1990-09-02', sysdate(), sysdate());
    INSERT INTO tb_user (user_name, password, name, age, sex, birthday, created, updated) VALUES ( 'hj', '123456', '静静', '22', '1', '1993-09-05', sysdate(), sysdate());
    
    
    1. JDBC 代码回顾
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    /**
     * @author xag
     */
    public class JDBCTest {
        public static void main(String[] args) throws Exception {
            Connection connection = null;
            PreparedStatement prepareStatement = null;
            ResultSet rs = null;
    
            try {
                // 加载驱动
                Class.forName("com.mysql.jdbc.Driver");
                // 获取连接
                String url = "jdbc:mysql://192.168.139.8:3306/mybatis_demo";
                String user = "system";
                String password = "123456";
                connection = DriverManager.getConnection(url, user, password);
                // 获取statement,preparedStatement
                String sql = "select * from tb_user where id=?";
                prepareStatement = connection.prepareStatement(sql);
                // 设置参数
                prepareStatement.setLong(1, 100);
                // 执行查询
                rs = prepareStatement.executeQuery();
                // 处理结果集
                while (rs.next()) {
                    System.out.println(rs.getString("user_name"));
                    System.out.println(rs.getString("name"));
                    System.out.println(rs.getInt("age"));
                    System.out.println(rs.getDate("birthday"));
                }
            } finally {
                // 关闭连接,释放资源
                if (rs != null) {
                    rs.close();
                }
                if (prepareStatement != null) {
                    prepareStatement.close();
                }
                if (connection != null) {
                    connection.close();
                }
            }
        }
    }
    

    开始 Mybaits 测试

    1. 新建mybatis-config.xml 文件(resources/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>
        <!-- 环境,可以配置多个,default:指定采用哪个环境 -->
        <environments default="test">
            <!-- id:唯一标识 -->
            <environment id="test">
                <!-- 事务管理器,JDBC类型的事务管理器 -->
                <transactionManager type="JDBC" />
                <!-- 数据源,池类型的数据源 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://192.168.139.8:3306/mybatis_demo" />
                    <property name="username" value="system" />
                    <property name="password" value="123456" />
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="mappers/MyMapper.xml" />
        </mappers>
    </configuration>
    
    1. 新建 MyMapper.xml 文件(resources目录下)
    <?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:命名空间,随便写,一般保证命名空间唯一 -->
    <mapper namespace="MyMapper">
       <!-- statement,内容:sql语句。id:唯一标识,随便写,在同一个命名空间下保持唯一
          resultType:sql语句查询结果集的封装类型,tb_user即为数据库中的表
        -->
       <select id="selectUser" resultType="com.xag.mybatis.pojo.User">
          select id,user_name as userName,password,name,age,birthday,sex,created,updated
          from tb_user
          where id = #{id}
       </select>
    </mapper>
    
    1. 新建 log4j.properties 文件(resources目录下)
    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
    
    1. 新建User类
    package com.xag.mybatis.pojo;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class User {
        private String id;
        private String userName;
        private String password;
        private String name;
        private Integer age;
        private Integer sex;
        private Date birthday;
        private String created;
        private String updated;
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public Integer getSex() {
            return sex;
        }
    
        public void setSex(Integer sex) {
            this.sex = sex;
        }
    
        public Date getBirthday() {
            return birthday;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    
        public String getCreated() {
            return created;
        }
    
        public void setCreated(String created) {
            this.created = created;
        }
    
        public String getUpdated() {
            return updated;
        }
    
        public void setUpdated(String updated) {
            this.updated = updated;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id='" + id + '\'' +
                    ", userName='" + userName + '\'' +
                    ", password='" + password + '\'' +
                    ", name='" + name + '\'' +
                    ", age=" + age +
                    ", sex=" + sex +
                    ", birthday='" + new SimpleDateFormat("yyyy-MM-dd").format(birthday) + '\'' +
                    ", created='" + created + '\'' +
                    ", updated='" + updated + '\'' +
                    '}';
        }
    }
    
    1. 新建 MybatisTest 测试类
    package com.xag.mybatis;
    
    import com.xag.mybatis.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 java.io.InputStream;
    
    public class MybatisTest {
        public static void main(String[] args) throws Exception {
            // 指定全局配置文件
            String resource = "mybatis-config.xml";
            // 读取配置文件
            InputStream inputStream = Resources.getResourceAsStream(resource);
            // 构建sqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            // 获取sqlSession
            SqlSession sqlSession = sqlSessionFactory.openSession();
            try {
                // 操作CRUD,第一个参数:指定statement,规则:命名空间+“.”+statementId
                // 第二个参数:指定传入sql的参数:这里是用户id
                User user = sqlSession.selectOne("MyMapper.selectUser", 100);
                System.out.println(user);
            } finally {
                sqlSession.close();
            }
        }
    }
    

    开始 完整的CRUD操作

    1. 创建UserDao接口
    package com.xag.mybatis.dao;
    
    import com.xag.mybatis.pojo.User;
    import java.util.List;
    
    public interface UserDao
    {
    
        /**
         * 根据id查询用户信息
         *
         * @param id
         * @return
         */
        public User queryUserById(String id);
    
        /**
         * 查询所有用户信息
         *
         * @return
         */
        public List<User> queryUserAll();
    
        /**
         * 新增用户
         *
         * @param user
         */
        public void insertUser(User user);
    
        /**
         * 更新用户信息
         *
         * @param user
         */
        public void updateUser(User user);
    
        /**
         * 根据id删除用户信息
         *
         * @param id
         */
        public void deleteUser(String id);
    }
    

    16.创建UserDaoImpl

    package com.xag.mybatis.dao.impl;
    
    import com.xag.mybatis.dao.UserDao;
    import com.xag.mybatis.pojo.User;
    import org.apache.ibatis.session.SqlSession;
    import java.util.List;
    
    public class UserDaoImpl implements UserDao {
        public SqlSession sqlSession;
    
        public UserDaoImpl(SqlSession sqlSession) {
            this.sqlSession = sqlSession;
        }
    
        public User queryUserById(String id) {
            return this.sqlSession.selectOne("UserDao.queryUserById", id);
        }
    
        public List<User> queryUserAll() {
            return this.sqlSession.selectList("UserDao.queryUserAll");
        }
    
        public void insertUser(User user) {
            this.sqlSession.insert("UserDao.insertUser", user);
        }
    
        public void updateUser(User user) {
            this.sqlSession.update("UserDao.updateUser", user);
        }
    
        public void deleteUser(String id) {
            this.sqlSession.delete("UserDao.deleteUser", id);
        }
    }
    

    17.编写UserDao对应的UserDaoMapper.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:命名空间,随便写,一般保证命名空间唯一 -->
    <mapper namespace="UserDao">
        <!-- statement,内容:sql语句。id:唯一标识,随便写,在同一个命名空间下保持唯一
           resultType:sql语句查询结果集的封装类型,tb_user即为数据库中的表
         -->
    
        <!--使用别名-->
        <select id="queryUserById" resultType="com.xag.mybatis.pojo.User">
          select
           tuser.id as id,
           tuser.user_name as userName,
           tuser.password as password,
           tuser.name as name,
           tuser.age as age,
           tuser.birthday as birthday,
           tuser.sex as sex,
           tuser.created as created,
           tuser.updated as updated
           from
           tb_user tuser
           where tuser.id = #{id};
       </select>
    
        <select id="queryUserAll" resultType="com.xag.mybatis.pojo.User">
            select id,user_name as userName,password,name,age,birthday,sex,created,updated from tb_user;
        </select>
    
        <!--插入数据-->
        <insert id="insertUser" parameterType="com.xag.mybatis.pojo.User">
            INSERT INTO tb_user (
            user_name,
            password,
            name,
            age,
            sex,
            birthday,
            created,
            updated
            )
            VALUES
            (
            #{userName},
            #{password},
            #{name},
            #{age},
            #{sex},
            #{birthday},
            now(),
            now()
            );
        </insert>
    
        <update id="updateUser" parameterType="com.xag.mybatis.pojo.User">
            UPDATE tb_user
            <trim prefix="set" suffixOverrides=",">
                <if test="userName!=null">user_name = #{userName},</if>
                <if test="password!=null">password = #{password},</if>
                <if test="name!=null">name = #{name},</if>
                <if test="age!=null">age = #{age},</if>
                <if test="sex!=null">sex = #{sex},</if>
                <if test="birthday!=null">birthday = #{birthday},</if>
                updated = now(),
            </trim>
            WHERE
            (id = #{id});
        </update>
    
        <delete id="deleteUser">
            delete from tb_user where id=#{id}
        </delete>
    </mapper>
    

    19.在mybatis-config.xml中添加配置

    <mappers>
            <mapper resource="mappers/MyMapper.xml" />
            <mapper resource="mappers/UserDaoMapper.xml"/>
     </mappers>
    
    1. 添加UserDaoImpl的测试用例(按住Alt+Enter)


      image.png
      image.png
    2. 编写UserDaoImpl的测试用例

    package com.xag.mybatis.dao.impl;
    
    import com.xag.mybatis.dao.UserDao;
    import com.xag.mybatis.dao.impl.UserDaoImpl;
    import com.xag.mybatis.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.Before;
    import org.junit.Test;
    import java.io.InputStream;
    import java.util.Date;
    import java.util.List;
    
    public class UserDaoImplTest {
    
        public UserDao userDao;
        public SqlSession sqlSession;
    
        @Before
        public void setUp() throws Exception {
            // mybatis-config.xml
            String resource = "mybatis-config.xml";
            // 读取配置文件
            InputStream is = Resources.getResourceAsStream(resource);
            // 构建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            // 获取sqlSession
            sqlSession = sqlSessionFactory.openSession();
            this.userDao = new UserDaoImpl(sqlSession);
        }
    
        @Test
        public void queryUserById() throws Exception {
            System.out.println(this.userDao.queryUserById("100"));
        }
    
        @Test
        public void queryUserAll() throws Exception {
            List<User> userList = this.userDao.queryUserAll();
            for (User user : userList) {
                System.out.println(user);
            }
        }
    
        @Test
        public void insertUser() throws Exception {
            User user = new User();
            user.setAge(16);
            user.setBirthday(new Date("1990/09/02"));
            user.setName("大鹏");
            user.setPassword("123456");
            user.setSex(1);
            user.setUserName("evan");
            this.userDao.insertUser(user);
            this.sqlSession.commit();
        }
    
        @Test
        public void updateUser() throws Exception {
            User user = new User();
            user.setBirthday(new Date());
            user.setName("静鹏");
            user.setPassword("654321");
            user.setSex(1);
            user.setUserName("evanjin");
            user.setId("100");
            this.userDao.updateUser(user);
            this.sqlSession.commit();
        }
    
        @Test
        public void deleteUser() throws Exception {
            this.userDao.deleteUser("102");
            this.sqlSession.commit();
        }
    }
    

    使用动态代理改造CRUD

    1. 修改测试用例的setUp方法
      // 1. 映射文件的命名空间(namespace)必须是mapper接口的全路径
      // 2. 映射文件的statement的id必须和mapper接口的方法名保持一致
      // 3. Statement的resultType必须和mapper接口方法的返回类型一致
      // 4. statement的parameterType必须和mapper接口方法的参数类型一致(不一定)
      this.userMapper = sqlSession.getMapper(UserDao.class);

    2. 完整的例子
      创建UserMapper接口(对应原UserDao)

    package com.xag.mybatis.dao;
    
    import org.apache.ibatis.annotations.Param;
    import com.xag.mybatis.pojo.User;
    import java.util.List;
    
    public interface UserMapper {
    
        /**
         * 登录(直接使用注解指定传入参数名称)
         * @param userName
         * @param password
         * @return
         */
        public User login(@Param("userName") String userName, @Param("password") String password);
    
        /**
         * 根据表名查询用户信息(直接使用注解指定传入参数名称)
         * @param tableName
         * @return
         */
        public List<User> queryUserByTableName(@Param("tableName") String tableName);
    
        /**
         * 根据Id查询用户信息
         * @param id
         * @return
         */
        public User queryUserById(Long id);
    
        /**
         * 查询所有用户信息
         * @return
         */
        public List<User> queryUserAll();
    
        /**
         * 新增用户信息
         * @param user
         */
        public void insertUser(User user);
    
        /**
         * 根据id更新用户信息
         * @param user
         */
        public void updateUser(User user);
    
        /**
         * 根据id删除用户信息
         * @param id
         */
        public void deleteUserById(Long id);
    }
    

    24.创建UserMapper.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:命名空间,随便写,一般保证命名空间唯一 ,为了使用接口动态代理,这里必须是接口的全路径名-->
    <mapper namespace="com.xag.mybatis.dao.UserMapper">
        <!--
           1.#{},预编译的方式preparedstatement,使用占位符替换,防止sql注入,一个参数的时候,任意参数名可以接收
           2.${},普通的Statement,字符串直接拼接,不可以防止sql注入,一个参数的时候,必须使用${value}接收参数
         -->
        <select id="queryUserByTableName" resultType="com.xag.mybatis.pojo.User">
            select * from ${tableName}
        </select>
    
        <select id="login" resultType="com.xag.mybatis.pojo.User">
            select id,user_name as userName,password,name,age,birthday,sex,created,updated from tb_user where user_name = #{userName} and password = #{password}
        </select>
    
        <!-- statement,内容:sql语句。
           id:唯一标识,随便写,在同一个命名空间下保持唯一,使用动态代理之后要求和方法名保持一致
           resultType:sql语句查询结果集的封装类型,使用动态代理之后和方法的返回类型一致;resultMap:二选一
           parameterType:参数的类型,使用动态代理之后和方法的参数类型一致
         -->
        <select id="queryUserById" resultType="com.xag.mybatis.pojo.User">
            select id,user_name as userName,password,name,age,birthday,sex,created,updated from tb_user where id = #{id}
        </select>
        <select id="queryUserAll" resultType="com.xag.mybatis.pojo.User">
            select id,user_name as userName,password,name,age,birthday,sex,created,updated from tb_user
        </select>
        <!-- 新增的Statement
           id:唯一标识,随便写,在同一个命名空间下保持唯一,使用动态代理之后要求和方法名保持一致
           parameterType:参数的类型,使用动态代理之后和方法的参数类型一致
           useGeneratedKeys:开启主键回写
           keyColumn:指定数据库的主键
           keyProperty:主键对应的pojo属性名
         -->
        <insert id="insertUser" useGeneratedKeys="true" keyColumn="id" keyProperty="id"
                parameterType="com.xag.mybatis.pojo.User">
            INSERT INTO tb_user (
            id,
            user_name,
            password,
            name,
            age,
            sex,
            birthday,
            created,
            updated
            )
            VALUES
            (
            null,
            #{userName},
            #{password},
            #{name},
            #{age},
            #{sex},
            #{birthday},
            NOW(),
            NOW()
            );
        </insert>
        <!--
           更新的statement
           id:唯一标识,随便写,在同一个命名空间下保持唯一,使用动态代理之后要求和方法名保持一致
           parameterType:参数的类型,使用动态代理之后和方法的参数类型一致
         -->
        <update id="updateUser" parameterType="com.xag.mybatis.pojo.User">
            UPDATE tb_user
            <trim prefix="set" suffixOverrides=",">
                <if test="userName!=null">user_name = #{userName},</if>
                <if test="password!=null">password = #{password},</if>
                <if test="name!=null">name = #{name},</if>
                <if test="age!=null">age = #{age},</if>
                <if test="sex!=null">sex = #{sex},</if>
                <if test="birthday!=null">birthday = #{birthday},</if>
                updated = now(),
            </trim>
            WHERE
            (id = #{id});
        </update>
        <!--
           删除的statement
           id:唯一标识,随便写,在同一个命名空间下保持唯一,使用动态代理之后要求和方法名保持一致
           parameterType:参数的类型,使用动态代理之后和方法的参数类型一致
         -->
        <delete id="deleteUserById">
            delete from tb_user where id=#{id}
        </delete>
    </mapper>
    
    1. 全局配置文件mybatis-config.xml引入UserMapper.xml
    <mappers>
            <mapper resource="mappers/MyMapper.xml" />
            <mapper resource="mappers/UserDaoMapper.xml"/>
            <mapper resource="mappers/UserMapper.xml"/>
     </mappers>
    

    26.创建UserMapper测试用例

    package com.xag.mybatis.dao;
    
    import com.xag.mybatis.dao.UserMapper;
    import com.xag.mybatis.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.Before;
    import org.junit.Test;
    
    import java.io.InputStream;
    import java.util.Date;
    import java.util.List;
    
    public class UserMapperTest {
    
        public UserMapper userMapper;
    
        @Before
        public void setUp() throws Exception {
            // 指定配置文件
            String resource = "mybatis-config.xml";
            // 读取配置文件
            InputStream inputStream = Resources.getResourceAsStream(resource);
            // 构建sqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            // 获取sqlSession
            SqlSession sqlSession = sqlSessionFactory.openSession(true);
    
            // 1. 映射文件的命名空间(namespace)必须是mapper接口的全路径
            // 2. 映射文件的statement的id必须和mapper接口的方法名保持一致
            // 3. Statement的resultType必须和mapper接口方法的返回类型一致
            // 4. statement的parameterType必须和mapper接口方法的参数类型一致(不一定)
            this.userMapper = sqlSession.getMapper(UserMapper.class);
        }
    
        @Test
        public void testQueryUserByTableName() {
            List<User> userList = this.userMapper.queryUserByTableName("tb_user");
            for (User user : userList) {
                System.out.println(user);
            }
        }
    
        @Test
        public void testLogin() {
            System.out.println(this.userMapper.login("hj", "123456"));
        }
    
        @Test
        public void testQueryUserById() {
            long i=100;
            System.out.println(this.userMapper.queryUserById(i));
        }
    
        @Test
        public void testQueryUserAll() {
            List<User> userList = this.userMapper.queryUserAll();
            for (User user : userList) {
                System.out.println(user);
            }
        }
    
        @Test
        public void testInsertUser() {
            User user = new User();
            user.setAge(20);
            user.setBirthday(new Date());
            user.setName("大神");
            user.setPassword("123456");
            user.setSex(2);
            user.setUserName("bigGod222");
            this.userMapper.insertUser(user);
            System.out.println(user.getId());
        }
    
        @Test
        public void testUpdateUser() {
            User user = new User();
            user.setBirthday(new Date());
            user.setName("静静");
            user.setPassword("123456");
            user.setSex(0);
            user.setUserName("Jinjin");
            user.setId("1");
            this.userMapper.updateUser(user);
        }
    
        @Test
        public void testDeleteUserById() {
            long i=102;
            this.userMapper.deleteUserById(i);
        }
    }
    
    1. 开启驼峰匹配(mybatis-config.xml的configuration节点下)
    <settings>
            <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    

    Spring 集成Mybatis

    28.引入spring和Mybatis相关依赖

    <!--数据库连接池-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.20</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>2.0.2</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.2.0.RELEASE</version>
            </dependency>
            <!--spring集成Junit测试-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>5.2.0.RELEASE</version>
                <scope>test</scope>
            </dependency>
            <!--spring容器-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.2.0.RELEASE</version>
            </dependency>
    
    1. 新建mybatis-config2.xml 配置(resource下)
    <?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"/>
        </settings>
        <!-- 环境,可以配置多个,default:指定采用哪个环境 -->
        <environments default="test">
            <!-- id:唯一标识 -->
            <environment id="test">
                <!-- 事务管理器,JDBC类型的事务管理器 -->
                <transactionManager type="JDBC" />
                <!-- 数据源,池类型的数据源 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://192.168.139.8:3306/mybatis_demo" />
                    <property name="username" value="system" />
                    <property name="password" value="errpass" />
                </dataSource>
            </environment>
        </environments>
    </configuration>
    
    1. 配置spring配置文件,new - >XML Configuration File -> Spring Config applicationContext-dao.xml(resource/spring 下)
      注:右上角有个提示需要点击
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
           xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
       http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    
        <!-- 加载配置文件 -->
        <context:property-placeholder location="classpath:properties/*.properties"/>
        <!-- 数据库连接池 -->
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
              destroy-method="close">
            <property name="driverClassName" value="${jdbc.driver}"/>
            <property name="url"
                      value="jdbc:mysql://${jdbc.host}:3306/${jdbc.database}?useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull"/>
            <property name="username" value="${jdbc.userName}"/>
            <property name="password" value="${jdbc.passWord}"/>
            <!-- 初始化连接大小 -->
            <property name="initialSize" value="${jdbc.initialSize}"></property>
            <!-- 连接池最大数据库连接数  0 为没有限制 -->
            <property name="maxActive" value="${jdbc.maxActive}"></property>
            <!-- 连接池最大的空闲连接数,这里取值为20,表示即使没有数据库连接时依然可以保持20空闲的连接,而不被清除,随时处于待命状态 0 为没有限制 -->
            <property name="maxIdle" value="${jdbc.maxIdle}"></property>
            <!-- 连接池最小空闲 -->
            <property name="minIdle" value="${jdbc.minIdle}"></property>
            <!--最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制-->
            <property name="maxWait" value="${jdbc.maxWait}"></property>
        </bean>
    
        <!-- spring和MyBatis完美整合 -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <!-- 自动扫描mapping.xml文件 -->
            <property name="mapperLocations" value="classpath:mappers/*.xml"></property>
            <!--如果mybatis-config.xml没有特殊配置也可以不需要下面的配置-->
            <property name="configLocation" value="classpath:mybatis-config2.xml" />
        </bean>
    
        <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.xag.mybatis.dao"/>
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
        </bean>
    
        <!-- (事务管理)transaction manager -->
        <bean id="transactionManager"
              class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
    </beans>
    
    1. 新建 db.properties 文件(resource/properties下)将先前的log4j.properties 也移到此目录
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.host=192.168.139.8
    jdbc.database=mybatis_demo
    jdbc.userName=system
    jdbc.passWord=123456
    jdbc.initialSize=0
    jdbc.maxActive=20
    jdbc.maxIdle=20
    jdbc.minIdle=1
    jdbc.maxWait=3000
    
    1. 新建测试 UserMapperSpringTest.java
    package com.xag.mybatis.dao;
    
    import com.xag.mybatis.dao.UserMapper;
    import com.xag.mybatis.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.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import java.io.InputStream;
    import java.util.Date;
    import java.util.List;
    
    //目标:测试一下spring的bean的某些功能
    @RunWith(SpringJUnit4ClassRunner.class)//junit整合spring的测试//立马开启了spring的注解
    @ContextConfiguration(locations="classpath:spring/applicationContext-*.xml")//加载核心配置文件,自动构建spring容器
    public class UserMapperSpringTest {
    
        @Autowired
        public UserMapper userMapper;
    
        @Test
        public void testQueryUserByTableName() {
            List<User> userList = this.userMapper.queryUserByTableName("tb_user");
            for (User user : userList) {
                System.out.println(user);
            }
        }
    
        @Test
        public void testLogin() {
            System.out.println(this.userMapper.login("hj", "123456"));
        }
    
        @Test
        public void testQueryUserById() {
            long i = 100;
            System.out.println(this.userMapper.queryUserById(i));
            User user = new User();
            user.setName("美女");
            user.setId("1");
            userMapper.updateUser(user);
    
            System.out.println(this.userMapper.queryUserById(i));
        }
    
        @Test
        public void testQueryUserAll() {
            List<User> userList = this.userMapper.queryUserAll();
            for (User user : userList) {
                System.out.println(user);
            }
        }
    
        @Test
        public void testInsertUser() {
            User user = new User();
            user.setAge(20);
            user.setBirthday(new Date());
            user.setName("大神");
            user.setPassword("123456");
            user.setSex(2);
            user.setUserName("bigGod222");
            this.userMapper.insertUser(user);
            System.out.println(user.getId());
        }
    
        @Test
        public void testUpdateUser() {
            User user = new User();
            user.setBirthday(new Date());
            user.setName("静静");
            user.setPassword("123456");
            user.setSex(0);
            user.setUserName("Jinjin");
            user.setId("1");
            this.userMapper.updateUser(user);
        }
    
        @Test
        public void testDeleteUserById() {
            long i = 102;
            this.userMapper.deleteUserById(i);
        }
    }
    

    说明

    Could not autowire. No beans of 'UserMapper' type found问题处理

    Settings - Editor - Inspections - Spring - Spring Core - Code - Autowiring for Bean Class - disable(idea是把√去掉)

    相关文章

      网友评论

          本文标题:在IntelliJ IDEA上使用Maven创建Mybatis项

          本文链接:https://www.haomeiwen.com/subject/omecnctx.html