Mybatis 增删查改

Mybatis

1、简介

什么是 MyBatis-Spring?

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

2、第一个Mybatis程序

搭建环境--.>导入Mybatis--》编写代码--》测试

2.1、搭建环境

搭建数据库

CREATE DATABASE `mybatis`;

USE `mybatis`;

CREATE TABLE `user`(
    `id` INT(20) NOT NULL PRIMARY KEY,
    `name` VARCHAR(30) DEFAULT NULL,
    `pwd` VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `user` (`id`,`name`,`pwd`)VALUES
(1,'张三','123456'),
(2,'李四','123456'),
(3,'王五','154656')
1592894772940.png

新建项目

  1. 新建一个普通的Maven项目

  2. 删除src目录

1592895413878.png
  1. 导入Maven依赖

    <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.29</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.2</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
    
            </dependency>
        </dependencies>
    
    

2.2、创建一个模块

  • 编写Mybatis的核心配置文件
1592923109097.png
<?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核心配置文件-->
<configuration>

    <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://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

</configuration>
  • 编写Mybatis工具类
1592923136022.png
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {

        try {
            //1、获取Mybatis第一步,获取sqlSessionFactory对象
            String resource ="mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
          sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    //获得SqlSession的实例
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

2.3、编写代码

  • 实体类
1592925672746.png
//实体类
public class User {
    private  int id;
    private String name;
    private String pwd;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public User(int id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }

    public User() {
    }
}
  • Dao接口
1592923173006.png

public interface UserMapper {
    List<User> getUserList();
}

  • 接口实现类由原来的UserDaoImpl转变为一个Mapper配置文件

    <?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=绑定一个对应的Dao/Mapper接口-->
    <mapper namespace="com.deng.dao.UserDao">
    
        <!--select查询语句-->
        <select id="getUserList" resultType="com.deng.pojo.User">
           select * from mybatis.user
       </select>
    
    </mapper>
    

2.4、测试

  • junit测试

    public class UserDaoTest {
        @Test
        public void test(){
            //第一步:获得SqlSession对象
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            //方式一:执行SQL
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            List<User> userList = userDao.getUserList();
            for (User user : userList) {
                System.out.println(user);
            }
            sqlSession.close();
        }
    }
    
1592923386326.png

3、CRUD

1、namespace

namespace中的包名要和Dao/mapper接口的包名一致

2、select

选择查询语句

  • id:就是对应的namespace中的方法名
  • resultType:Sql语句执行的返回值
  • parameterType:参数类型
  1. 编写接口

    //根据ID查询用户
        User getUserById(int id);
    
  1. 编写对应的mapper中的sql语句

    <select id="getUserById" parameterType="int" resultType="com.deng.pojo.User">
            select * from mybatis.user  where id = #{id}
        </select>
    
  1. 测试

     @Test
        public  void getUserById(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            User user = mapper.getUserById(1);
            System.out.println(user);
            sqlSession.close();
        }
    
1592923440710.png

3、insert

  1. 编写接口

     int addUser(User user);
    
  1. 编写对应的mapper中的sql语句

    <insert id="addUser" parameterType="com.deng.pojo.User">
            insert into mybatis.user(id , name , pwd)values (#{id},#{name},#{pwd});
        </insert>
    
  1. 测试
@Test
    public void addUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int res = mapper.addUser(new User(4, "阿达", "123456"));
        if (res>0){
            System.out.println("插入成功");
        }
sqlSession.commit();
        sqlSession.close();
    }
1592923506647.png

4、update

  1. 编写接口

     int updateUser(User user);
    
  1. 编写对应的mapper中的sql语句

     <update id="updateUser" parameterType="com.deng.pojo.User">
            update mybatis.user set name=#{name},pwd=#{pwd} where id =#{id};
        </update>
    
  1. 测试

    @Test
        public  void updateUser(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
             mapper.updateUser(new User(4, "回答", "4565666"));
             sqlSession.commit();
             sqlSession.close();
    
        }
    

5、delete

  1. 编写接口

    int deleteUser(int id);
    
  1. 编写对应的mapper中的sql语句

    <delete id="deleteUser" parameterType="int">
            delete from mybatis.user where id=#{id};
        </delete>
    
  1. 测试

     @Test
        public  void deleteUser(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            mapper.deleteUser(4);
            sqlSession.commit();
            sqlSession.close();
    
        }
    
1592923596759.png

6、使用Map操作数据库

在实体类或者数据库中的表,字段或者参数过多时,,可以考虑使用M ap

  1. 编写接口

     int addUser2(Map<String,Object>map);
    
  1. 编写对应的mapper中的sql语句

     <insert id="addUser2" parameterType="map">
            insert into mybatis.user(id , name , pwd)values (#{userid},#{username},#{password});
        </insert>
    
  1. 测试

    @Test
        public  void addUser2(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            HashMap<String, Object> map = new HashMap<>();
            map.put("userid",5);
            map.put("username","鼠标");
            map.put("password","1223545");
    
            mapper.addUser2(map);
            sqlSession.commit();
            sqlSession.close();
    
        }
    
1592979761979.png

Map传递参数,直接在sql中取出key即可

对象传递参数,直接在sql中取出对象的属性即可

只有一个基本类型参数的情况下,可以直接在sql中取到

多个参数用Map或者注解

7、模糊查询

  1. 编写接口

      List<User> getUserLike(String value);
    
  1. 编写对应的mapper中的sql语句

    <select id="getUserLike" resultType="com.deng.pojo.User">
            select * from mybatis.user where name like #{value}
        </select>
    
  1. 测试

     @Test
        public void getUserLike(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> userLike = mapper.getUserLike("%张%");
            for (User user : userLike) {
                System.out.println(user);
            }
            sqlSession.close();
        }
    
1592981497837.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353