框架之mybatis(2)————day39 基本的第二种用法2

学习MyBatis的准备工作

环境

  • JDK1.8
  • Mysql 5.7
  • maven 3.6.1
  • IDEA

需要掌握的知识

  • JDBC
  • Mysql
  • Java基础
  • Maven
  • Junit

简介

什么是MyBatis

自己理解的是:

  • 是一种持久层的框架 :
  • 支持SQL,以及存储过程的高级映射
  • 他避免了JDBC的代码和手动的加参数
  • 使用xml 或者注解进行配置映射文件,POJO在数据库中进行记录
  • 选择题:MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis ,2013年11月迁移到Github。
持久化
  • 把数据在持久和瞬时之间进行状态的切换
  • 生活中的持久化:冷藏,罐头
  • 内存:**断电即失
为什么需要进行持久化
  • 内存贵
  • 不能让重要的数据消失了
持久层
  • 完成持久化工作的代码块
  • 层界限十分明显
为什么需要Mybatis?
优点:
  • 简单易学
  • 灵活
  • sql和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象与数据库的orm字段关系映射
  • 提供对象关系映射标签,支持对象关系组建维护
  • 提供xml标签,支持编写动态sql。

2 MyBatis入门

思路:搭建环境–>导入Mybatis–>编写代码–>测试!

2.1搭建环境

思路:搭建环境–>导入Mybatis–>编写代码–>测试!

创建数据库
CREATE DATABASE mybatis ;
USE mybatis;

CREATE TABLE `user`(
`id` INT(20) NOT NULL PRIMARY KEY,
`name` VARCHAR(32) DEFAULT NULL,
`pwd` VARCHAR(32) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `user` (`id`,`name`,`pwd`) VALUES 
(1,'张三','123456'),
(2,'李四','123456'),
(3,'王五','123456')

新建项目
  1. 新建一个普通的maven项目
  2. 删除src目录
  3. 导入maven依赖
   <!--导入依赖-->
    <dependencies>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--mybatis-->
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        //找接口的映射文件
<build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>
    </dependencies>
创建一个模块
  • 编写mybatis的核心配置文件
<?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>
    <!--这个给属性添加配置文件的放在第1位-->
    <properties resource="db.properties"></properties>
    <!--还没有进行设置的日志的设置的放在第2位-->
    <!--给起别名的放在第3位-->
    <!--这里给org.westos.pojo.User起了一个别名-->
    <typeAliases>
       <typeAlias type="org.westos.pojo.User" alias="user"></typeAlias>
    </typeAliases>
    <environments default="mybatis">
        <environment id="mybatis">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${druid}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--接口的映射文件的全路径,一共是有三种的写法,习惯用第一种进行写映射文件-->
    <mappers>
        <mapper resource="org/westos/dao/UserMapper.xml"></mapper>
        <!--<mapper class="org.westos.dao.UserMapper.xml"></mapper>-->
        <!--<package name="org/westos/dao/UserMapper.xml"></package>-->
    </mappers>
</configuration>
  • 编写mybatis工具类
package org.westos.utils;


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.IOException;
import java.io.InputStream;

/**
 * @Description:TODO
 * @Author:@李小白
 * @Date:2019/9/28 21:33
 */
public class MyBatis {
   private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

编写代码
  • 实体类
package com.kuang.pojo;

//实体类
public class User {
    private int id;
    private String name;
    private String pwd;

    public User() {
    }

    public User(int id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.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;
    }

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

  • Dao接口
package org.westos.dao;

import org.westos.pojo.User;

import java.util.List;

/**
 * @Description:TODO
 * @Author:@李小白
 * @Date:2019/9/28 20:59
 */
public interface UserMapper {
    //查询所有的数据
    List<User> getFindAll();
    //用id进行查询数据
    User getFindUserById(int id);
    //进行模糊查询,根据姓名进行模糊查询
    List<User> getUserLike(String name);
    //添加一个用户
    int getAddUser(User user);
    //根据id更改一个用户
    int getUpdateUser(User user);
    //根据id进行删除一个用户
    int getDeleteUser(int id);


}

  • 接口实现类由原来的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">
<mapper namespace="org.westos.dao.UserMapper">
    <!--这个就是给起一个别名,这里我没有用到,但是可以执行-->
    <resultMap id="map" type="user">
        <id property="id" column="id"></id>
        <result property="username" column="name"></result>
        <result property="password" column="pwd"></result>
    </resultMap>
    <select id="getFindAll" resultType="user">
        select  * from mybatis.user;
</select>
    <!--这里给org.westos.pojo.User起了一个别名-->
    <select id="getFindUserById" resultType="user" >
        select * from mybatis.user where id=#{id};
    </select>
    <!--跟具姓名进行模糊查询resultType="user"-->
    <select id="getUserLike" parameterType="String" resultType="user">
        select * from mybatis.user where name like #{name};
    </select>
    <!--这里给org.westos.pojo.User起了一个别名,,,这个是在user不变的情况下执行-->
    <insert id="getAddUser" parameterType="user" >
       insert  into mybatis.user (id,name ,pwd) values (#{id},#{name},#{pwd});
    </insert>
    <!--这里给org.westos.pojo.User起了一个别名 ,,,这个是在user不变的情况下执行-->
    <update id="getUpdateUser" parameterType="user">
        update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id};
    </update>
    <!--,,,这个是在user不变的情况下执行-->
    <delete id="getDeleteUser" parameterType="int"  >
        delete from mybatis.user where id=#{id};
    </delete>
</mapper>
测试
  • junit测试
package org.westos.dao;

import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.westos.pojo.User;
import org.westos.utils.MyBatis;

import java.util.List;

/**
 * @Description:这是一个方便进行测试的类
 * @Author:@李小白
 * @Date:2019/9/28 21:38
 */
public class MyTest {
    //开始进行查询所有的用户
    UserMapper mapper;
    SqlSession sqlSession;
    @Before
    public void getBefore(){
        sqlSession = MyBatis.getSqlSession();
        mapper = sqlSession.getMapper(UserMapper.class);
    }
    @Test
    public void getFangAll(){

        List<User> findAll = mapper.getFindAll();
        for (User user : findAll) {
            System.out.println(user);
        }
        sqlSession.close();
    }
    //根据id进行查询用户
    @Test
    public void getFindUserById(){

        User findUserById = mapper.getFindUserById(1);
        System.out.println(findUserById);
        sqlSession.close();
    }
    //添加一个用户,一定要记住一个问题,增删改一定要进行手动提交
    @Test
    public void getAddUser(){
        int name = mapper.getAddUser(new User(5, "赵六", "12333"));
        sqlSession.commit();
        System.out.println(name);
    }
    //更改一个客也是有问题,记得手动提交
    @Test
    public void getUpdateUser(){
        int update = mapper.getUpdateUser(new User(2, "小李", "53453"));
       sqlSession.commit();
        System.out.println(update);
    }
    //对数据库好像不管用
    @Test
    public void getDeleteUser(){
        int deleteUser = mapper.getDeleteUser(1);
        sqlSession.commit();
        System.out.println(deleteUser);
    }
    //对数据进行模糊查询,这个的问题就是应该返回的第一个List<User>
    @Test
    public void getUserLike(){
        List<User> userLike = mapper.getUserLike("%小%");
        for (User user : userLike) {
            System.out.println(user);
        }
    }
    @After
    public void getAfter(){
        sqlSession.close();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值