Mybatis简单介绍及初步使用

1.1 什么是Mybatis

  • 一款优秀的持久层框架
  • 支持定制化SQL,存储过程以及高级映射
  • 避免几乎所有的JDBC代码和手动设置参数以及获取结果集
  • 可以使用简单的XML或注解来配置和映射原生类型,接口和Java的POJO(Plain Ordinary Java Objects,普通的 Java对象)为数据库中的记录
  • MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github

如何获得Mybatis?

  • maven仓库

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.5</version>
    </dependency>
    
  • Github

  • 中文文档

1.2 持久化

数据持久化

  • 持久化就是将程序的数据在持久状态和瞬时状态转化的过程
  • 内存:断电即失
  • 数据库(JDBC),io文件持久化
  • 生活举例:冷藏,罐头

为什么需要持久化?

  • 有一些对象,不能让他丢掉
  • 内存太贵了

1.3 持久层

Dao层,Service层,Controller层…

  • 完成持久化工作的代码块
  • 层界限十分明显

1.4 为什么需要Mybatis?

  • 将数据存入数据库中
  • 方便
  • 传统的JDBC代码太复杂。简化,框架,自动化
  • 优点:
    • 简单易学
    • 灵活
    • SQL和代码的分离,提高了可维护性
    • 提供映射标签,支持对象与数据库的ORM字段关系映射
    • 提供对象关系映射标签,支持对象关系组建维护
    • 提供xml标签,支持编写动态sql

2.第一个Mybatis程序

2.1 搭建环境

搭建数据库

新建项目

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

2.删除src目录

3.导入maven依赖

<!--导入依赖 -->
<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.24</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.5</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.12</version>
    </dependency>
</dependencies>

2.2 创建一个模块

  • 编写mybatis的核心配置文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mabatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="root"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="com/yy/dao/UserMapper.xml"/>
        </mappers>
    </configuration>
    
  • 编写mybatis工具类

    /**sqlSessionFactory -->sqlSession
     * @author YY
     */
    public class MybatisUtils {
    
        public static  SqlSessionFactory sqlSessionFactory;
        static {
    
            try {
                //使用Mybatis第一步:获取sqlSessionFactory对象
                String resource ="mybatis-config.xml";
                InputStream inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        /**
         * 既然有了sqlSessionFactory,我们就看可以从中获得SqlSession的实例了
         * SqlSession完全包含面向数据库执行SQL命令所需的所有方法
         * @return
         */
        public static SqlSession getSqlSession(){
            return sqlSessionFactory.openSession();
        }
    }
    

2.3 编写代码

  • 实体类

    public class User {
        private int id;
        private String name;
        private String password;
    
        public User(int id, String name, String password) {
            this.id = id;
            this.name = name;
            this.password = password;
        }
    
        public int getId() {
            return id;
        }
    
        public String getName() {
            return name;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        @Override
        public String toString() {
            return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
        }
    }
    
  • Dao接口

    public interface UserDao {
        List<User> getUserList();
        User getUserById(int id);
        int addUser2(Map<String,Object> map);
        int addUser(User user);
        int updataUser(User user);
        int deleteUser(int id);
        List<User>getUserLike(String value);
    }
    
  • 接口实现类由原来的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="com.yy.dao.UserDao">
        <select id="getUserList" resultType="com.yy.pojo.User">
            select * from mybatis.user
        </select>
    </mapper>
    

2.4 测试

核心配置文件中注册mappers

  • junit测试

    @Test
    public void test(){
        //第一步获得sqlSession对象
        SqlSession sqlSession = null;
        try {
            sqlSession = MybatisUtils.getSqlSession();
            //方式一:getMapper
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            List<User> userList=userDao.getUserList();
    
            for (User user:userList) {
                System.out.println(user);
            }
        }catch (Exception  e){
            e.printStackTrace();
        }finally {
            //关闭SqlSession
            sqlSession.close();
        }
    }
    

3.CRUD

3.1 namespace

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

3.2 select

选择,查询语句

  • id:对应的namespace中的方法名
  • resultType:SQL语句执行的返回值
  • parameterType:参数类型
<select id="getUserById" resultType="com.yy.pojo.User">
    select *from user where id=#{id}
</select>

3.3 Insert

<insert id="addUser" parameterType="com.yy.pojo.User" >
    insert into user (id,name,pwd) values(#{id},#{name},#{password});
</insert>

3.4 update

<update id="updataUser" parameterType="com.yy.pojo.User">
    update user set name=#{name},pwd=#{password} where id =#{id}
</update>

3.5 Delete

<delete id="deleteUser" parameterType="int">
    delete from user where id =#{id}
</delete>

3.6 万能的Map

假如实体类,或数据库中的表,字段或者参数过多,应当考虑使用Map

 int addUser2(Map<String,Object> map);
<insert id="addUser2" parameterType="map">
    insert into user (id,name,pwd) values(#{userid},#{username},#{password});
</insert>
@Test
public void addUser2(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserDao mapper = sqlSession.getMapper(UserDao.class);
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("userid",5);
    map.put("username","tony");
    map.put("password","8745");
    mapper.addUser2(map);
    sqlSession.commit();
    sqlSession.close();
}

Map传递参数,直接在SQL中取出key即可 【parameterType=”map】

对象传递参数,直接在SQL中取出对象的属性即可 【parameterType=“Object”】

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

多个参数用Map,或注解

3.8 模糊查询

模糊查询怎么写?

1.Java代码执行的时候,传递通配符 % %

 List<User> t = mapper.getUserLike("%t%");

2.在SQL拼接中使用通配符

select * from user where name like "%" #{value} "%"
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值