在IntelliJ IDEA上使用Maven创建Mybatis项目

  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依赖包


            mysql
            mysql-connector-java
            8.0.16

  1. 引入 mybatis 依赖包

            org.mybatis
            mybatis
            3.5.2

  1. 引入日志依赖包

            org.slf4j
            slf4j-log4j12
            1.7.28

7.引入junit依赖


            junit
            junit
            4.12

  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目录下)




    
    
        
        
            
            
            
            
                
                
                
                
            
        
    
    
        
    

  1. 新建 MyMapper.xml 文件(resources目录下)




   
   

  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 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 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





    

    
    

    

    
    
        INSERT INTO tb_user (
        user_name,
        password,
        name,
        age,
        sex,
        birthday,
        created,
        updated
        )
        VALUES
        (
        #{userName},
        #{password},
        #{name},
        #{age},
        #{sex},
        #{birthday},
        now(),
        now()
        );
    

    
        UPDATE tb_user
        
            user_name = #{userName},
            password = #{password},
            name = #{name},
            age = #{age},
            sex = #{sex},
            birthday = #{birthday},
            updated = now(),
        
        WHERE
        (id = #{id});
    

    
        delete from tb_user where id=#{id}
    

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


        
        
 
  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 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 queryUserByTableName(@Param("tableName") String tableName);

    /**
     * 根据Id查询用户信息
     * @param id
     * @return
     */
    public User queryUserById(Long id);

    /**
     * 查询所有用户信息
     * @return
     */
    public List 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





    
    

    

    
    
    
    
    
        INSERT INTO tb_user (
        id,
        user_name,
        password,
        name,
        age,
        sex,
        birthday,
        created,
        updated
        )
        VALUES
        (
        null,
        #{userName},
        #{password},
        #{name},
        #{age},
        #{sex},
        #{birthday},
        NOW(),
        NOW()
        );
    
    
    
        UPDATE tb_user
        
            user_name = #{userName},
            password = #{password},
            name = #{name},
            age = #{age},
            sex = #{sex},
            birthday = #{birthday},
            updated = now(),
        
        WHERE
        (id = #{id});
    
    
    
        delete from tb_user where id=#{id}
    

  1. 全局配置文件mybatis-config.xml引入UserMapper.xml

        
        
        
 

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 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 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节点下)

        

Spring 集成Mybatis

28.引入spring和Mybatis相关依赖


        
            com.alibaba
            druid
            1.1.20
        
        
            org.mybatis
            mybatis-spring
            2.0.2
        
        
            org.springframework
            spring-jdbc
            5.2.0.RELEASE
        
        
        
            org.springframework
            spring-test
            5.2.0.RELEASE
            test
        
        
        
            org.springframework
            spring-context
            5.2.0.RELEASE
        
  1. 新建mybatis-config2.xml 配置(resource下)




    
        
    
    
    
        
        
            
            
            
            
                
                
                
                
            
        
    

  1. 配置spring配置文件,new - >XML Configuration File -> Spring Config applicationContext-dao.xml(resource/spring 下)
    注:右上角有个提示需要点击


    
    
    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    

    
    
        
        
        
        
        
    

    
    
        
        
    

    
    
        
    

  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 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 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项目)