博客园不常在线

有问题联系微信

微信号

微信公众号

MyBaits 系列:快速入门Mybatis完成基本CURD(注解实现)

一.什么是Mybatis?

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。

MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

二.Come on

1.新建Project    选择Maven  直接Next  不用选择模板

 

 

 2.输入名称、公司或组织Id  选择位置  指定版本  Finish

 

 

 3.选择Enable Auto-Import  (启用自动导入)

 

 

 4.导入坐标

 

 

 5.添加表

1 DROP TABLE IF EXISTS `user`;
2 
3 CREATE TABLE `mybatis`.`user`  (
4   `userId` int(0) NOT NULL AUTO_INCREMENT,
5   `userName` varchar(20) NOT NULL,
6   `userSex` varchar(2) NULL,
7   PRIMARY KEY (`userId`)
8 );

6.编写domain层

package cn.lb.domain;

public class User {
    private Integer userId;
    private String userName;
    private String userSex;

    public User() {
    }

    public User( String userName, String userSex) {
        this.userName = userName;
        this.userSex = userSex;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserSex() {
        return userSex;
    }

    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", userSex='" + userSex + '\'' +
                '}';
    }
}

 

7.编写dao层

 1 package cn.lb.dao;
 2 
 3 import cn.lb.domain.User;
 4 import org.apache.ibatis.annotations.Delete;
 5 import org.apache.ibatis.annotations.Insert;
 6 import org.apache.ibatis.annotations.Select;
 7 import org.apache.ibatis.annotations.Update;
 8 
 9 import java.util.List;
10 
11 public interface IUserDao {
12     /**
13      * 查询所有
14      * @return
15      */
16     @Select("select * from user")
17     List<User> findAllUser();
18 
19     /**
20      * 根据Id查询
21      * @return
22      */
23     @Select("select * from user where userId=#{userId}")
24     User findUserById(Integer userId);
25 
26     /**
27      * 根据名字查用户
28      * @param userName
29      * @return
30      */
31     @Select("select * from user where userName like #{username}")
32     List<User> findUserByName(String userName);
33 
34     /**
35      * 保存用户
36      * @param user
37      */
38     @Insert("insert into user(userName,userSex) values(#{userName},#{userSex})")
39     void saveUser(User user);
40 
41     /**
42      * 更新用户
43      * @param user
44      */
45     @Update("update user set userName=#{userName} , userSex=#{userSex} where userId=#{userId}")
46     void updateUser(User user);
47 
48     /**
49      * 根据Id删除用户
50      * @param userId
51      */
52     @Delete("delete from user where userId=#{userId}")
53     void deleteUser(Integer userId);
54 }

8.添加Mybatis配置文件

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 3         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 4 <configuration>
 5     
 6     <!--配置Properties
 7     可以在标签内部配置连接数据库的信息,也可以通过属性引入外部配置文件信息
 8     resource属性:用于指定配置文件的位置,是按照类路径的写法来写,并且必须存在于类路径下
 9    -->
10    
11    <!--引入JdbcConfig配置文件-->
12     <properties resource="jdbcConfig.properties"/>
13 
14     <!--配置别名-->
15     <typeAliases>
16         <!--typeAlias用于配置别名 type属性指定的是实体类全限定类名,alias属性指定别名
17           当指定了别名就不区分大小写-->
18         <package name="cn.lb.domain"/>
19     </typeAliases>
20 
21     <!-- 配置环境-->
22      <environments default="mysql">
23          <!--配置MySql环境-->
24          <environment id="mysql">
25              <transactionManager type="JDBC"></transactionManager>
26              <dataSource type="POOLED">
27                  <property name="driver" value="${jdbc.driver}"/>
28                  <property name="url" value="${jdbc.url}"/>
29                  <property name="username" value="${jdbc.username}"/>
30                  <property name="password"  value="${jdbc.password}"/>
31              </dataSource>
32          </environment>
33      </environments>
34 
35     <!--指定带注解的包-->
36     <mappers>
37         <!--package标签是用于指定dao接口所在的包 当指定了之后就是不需要写resource或者class或mapper-->
38         <package name="cn.lb.dao"/>
39     </mappers>
40 </configuration>

JdbcConfig配置

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///mybatis?characterEncoding=utf8
jdbc.username=root
jdbc.password=1234

9.测试

package cn.lb.test;

import cn.lb.dao.IUserDao;
import cn.lb.domain.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 javax.annotation.PreDestroy;
import java.io.InputStream;
import java.util.List;

public class MybatisTest {
    private SqlSessionFactory factory;
    private SqlSession sqlSession;
    private InputStream inputStream;
    private IUserDao userDao;

    @Before
    public void init() throws Exception {
        inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        factory = new SqlSessionFactoryBuilder().build(inputStream);
        sqlSession = factory.openSession();
        userDao = sqlSession.getMapper(IUserDao.class);
    }

    @Test
    public void testSave() {
        User user = new User("张三", "男");
        userDao.saveUser(user);
    }

    @Test
    public void testFindAll()
    {
        List<User> list =userDao.findAllUser();
        list.forEach(user-> System.out.println(user));
    }

    @Test
    public void testFindById()
    {
        User user =userDao.findUserById(1);
        System.out.println(user);
    }

    @Test
    public void testFindByName()
    {
        List<User> list =userDao.findUserByName("%三%");
    }

    @Test
    public void testUpdate()
    {
        User user =userDao.findUserById(1);
        user.setUserName("李四");
        userDao.updateUser(user);
        System.out.println(userDao.findUserById(1));
    }
    
    @Test
    public void testDelete()
    {
        userDao.deleteUser(1);
    }

    @After
    public void destory() throws Exception {
        sqlSession.commit();
        sqlSession.close();
        inputStream.close();
    }

}

 

注意:如果出现无法编译请指定项目编译版本

posted @ 2020-01-07 15:12  Code技术分享  阅读(345)  评论(0编辑  收藏  举报