github中litemall项目学习(二) Mybatis学习()

本文档详细介绍了MyBatis的学习过程,包括MyBatis的定义、与JDBC和Hibernate的比较、环境搭建、核心配置文件、Mapper接口、映射文件的创建、测试、日志配置、核心配置文件详解、属性配置文件等内容。重点讲解了MyBatis的参数获取方法、查询功能、特殊查询场景,如模糊查询、批量删除、动态SQL等,以及解决字段和属性名不一致的问题。此外,还涉及到了MyBatis的一级和二级缓存以及PageHelper分页插件的使用。
摘要由CSDN通过智能技术生成

目录

1.什么是mybatis

2.JDBC Hibernate Mybatis比较

3.Mybatis环境搭建

4.Mybatis核心配置文件

5.Mapper接口

6.创建映射文件

7.测试

8.添加log日志

9.详解核心配置文件

10.propertis配置文件

11.MyBatisd的两种获取参数方法

12.Mybatis获取参数的情况

13.mybatis的各种查询功能

14 Mybatis的特殊查询

15.解决数据库字段和实体类属性名不一致的问题

16.动态SQL

17.Mybatis缓存:

18.pageHelper分页插件


 本笔记学习B站视频【尚硅谷】MyBatis零基础入门教程(细致全面,快速上手)_哔哩哔哩_bilibili

1.什么是mybatis

以前都是使用JDBC完成代码和数据库的交互。

Mybatis是一个半自动(还有一部分SQL语句需要自己写)持久层框架,支持自定义SQL(自己写SQL,维护方便)、存储过程和高级映射。

使用Mybaits几乎免除了JDBC代码、手动设置参数(比如SQL语句中的拼接参数)和获取结果集。

使用简单的XML或者注解来配置和原始映射。将接口直接映射成数据库中的记录(只需要有接口,直接对应XML文件实现对数据的操作)

(可以理解为Mybatis封装了JDBC)

应用的三层架构:
表示层:展现给用户的界面
业务逻辑层:业务逻辑
持久层\:操作数据库的层

2.JDBC Hibernate Mybatis比较

JDBC:SQL夹杂JAVA代码,耦合高,硬编码问题,修改维护SQL麻烦,代码冗长,开发效率低

Hibernate:
(1)操作简单,简单的增删改查容易.
(2)但是内部自动产生SQL,不容易做特殊优化.
(3)长难SQL需要绕过框架.
(4)基于全映射的全自动框架,默认会把表中的字段全部查出来,如果只需要表中几个字段需要自己写SQL
(5)反射操作太多,数据库性能下降

Mybatis:
(1)轻量,性能高,开发效率略逊于Hibernate,但可以接受
(2)SQL和JAVA编码分开,SQL专注业务,JAVA专注业务   

3.Mybatis环境搭建

idea新建项目,配置maven,添加maven的module,在module的pom.xml文件中添加依赖

<packaging>jar</packaging>
    <dependencies>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.6</version>
        </dependency>

    </dependencies>

4.Mybatis核心配置文件

Mybatis的核心配置文件,用于配置连接数据库的环境和Mybatis的全局配置信息.但是将mybatis整合到Spring或者Springboot后,该配置文件可以省略,这些工作交给Springboot/spring做.配置文件自己创建mybatis-config.xml,放在resource文件夹中.文件内容见官方文档,如下:

<?xml version="1.0" encoding="UTF-8" ?> <!--xml文件声明,声明版本和编码-->
<!--mybatis的约束-->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
        <environments default="development"><!--enviroments,配置连接数据库的环境-->
        <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/clerk"/>
        <property name="username" value="root"/>
        <property name="password" value="ruiyang1999"/>
        </dataSource>
        </environment>
        </environments>
        <mappers>                                <!--引入映射文件-->
        <mapper resource="mappers/UserMapper.xml"/>
        </mappers>
</configuration>

     

5.Mapper接口

相当于DAO接口,但是只有接口,无需实现类.调用接口中的方法回直接对应XML文件中的SQL语句执行.Mapper接口里面就是操作数据库的方法   

根据数据库的表创建实体类,再创建Mapper接口文件

(1)实体类写好实体类的属性后,右击/generate/constructor,setter和getter,toString可以自动生成构造函数,getset和toString方法

(2)Mapper接口

public interface UserMapper {

    /*
    接口文件(Interface)要和映射文件(XML)两点一致
    1.映射文件中的namespace的值为接口文件的全类名
    2.映射文件中SQL语句的id要为接口文件中相应接口函数的函数名
     */

    /*
    添加用户信息
     */
    public int insertUser();
    /*
    删除用户信息
     */
    public int deleteUser();
    /*
    修改用户信息
     */
    public int updateUser();
    /*
    根据id查询一个用户信息
     */
    public User getUserById();
    /*
    查询所以用户信息
     */
    public List<User> getAllUser();
}

6.创建映射文件

Mybatis是一个ORM持久层框架

ORM Object Relationship Mapping

Object指JAVA中的实体类的对象,Relationship指关系型数据库,Mapping指二者之间的对应关系

JAVA 数据库
属性 字段
对象 元组

在resource中创建映射文件,一般一个接口类对应一个实体类,对应数据库中一个表,对应一个映射文件,映射文件命名一般和接口类命名一样,只是后缀改为.xml.

接口类:

public interface UserMapper {

    /*
    接口文件(Interface)要和映射文件(XML)两点一致
    1.映射文件中的namespace的值为接口文件的全类名
    2.映射文件中SQL语句的id要为接口文件中相应接口函数的函数名
     */

    /*
    添加用户信息
     */
    public int insertUser();
    /*
    删除用户信息
     */
    public int deleteUser();
    /*
    修改用户信息
     */
    public int updateUser();
    /*
    根据id查询一个用户信息
     */
    public User getUserById();
    /*
    查询所以用户信息
     */
    public List<User> getAllUser();
}

映射文件:

注意,一般增删改返回值设为int或者void即可,但是查需要设置为实体对象.

mybatis会帮我们处理查询的结果,但是编写查询语句时需要指明我们查询需要的结果类型resultType或者resultMap.

resultType:设置默认的映射关系(实体类的属性和数据库中字段名一致)
               resultMap:设置自定义的映射关系(实体类的属性和数据库字段名不一致,对多一或者一对多关系)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--配置文件的约束-->
<mapper namespace="com.atguigu.mybatis.mapper.UserMapper"><!--namespace需要和相应接口的全类名保持一致-->
           <!--insertUser方法-->
           <insert id="insertUser">
               insert into user values(1,'admin','123456',23,'男','20958@qq.com')
           </insert>
           <!--updateUser方法-->
           <update id="updateUser">
               update user set username = 'user1' where id = 1
           </update>
           <!--deleteUser方法-->
           <delete id="deleteUser">
               delete from user where id = 1
           </delete>
           <!--getUserById方法-->
           <!--查询必须设置resultType或者resultMap
               resultType:设置默认的映射关系(实体类的属性和数据库中字段名一致)
               resultMap:设置自定义的映射关系(实体类的属性和数据库字段名不一致,对多一或者一对多关系)-->
           <select id="getUserById"  resultType="com.atguigu.mybatis.pojo.User">
               select * from user where id = 1
           </select>
           <!--getAllUser方法-->
           <select id="getAllUser"  resultType="com.atguigu.mybatis.pojo.User">
               select * from user
           </select>
</mapper>

调用接口类中的方法时,通过全类名找到XML映射文件,通过方法名找到SQL语句

7.测试

myBatis提供了一个操作数据库的会话对象,sqlsession.

SqlSessionFactoryBuilder - SqlSessionFactory - SqlSession - getMapper() - insertUser()

public class MybatisTest {
    @Test
    public void testMybatis() throws IOException {

        /*
        myBatis提供了一个操作数据库的会话对象,sqlsession
         */

        //以字节输入流方式,加载核心配置文件
        InputStream is =  Resources.getResourceAsStream("mybatis-config.xml");
        //获取sqlSessionFactoryBuilder---SSF的builder
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取SqlSessionFactory--SSF
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //获取mybatis操作数据库的会话对象SqlSession,SqlSession代表JAVA程序和数据库之间的对话
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //默认不自动提交事务,openSession参数设置为为true,自动提交
        //获取mapper接口对象,getMapper方法输入一个类,返回该类的一个实现类的实例对象.该方法低层使用代理模式
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //测试插入功能
        //int res = mapper.insertUser();
        //测试更新功能
        //int res = mapper.updateUser();
        //测试查询一个人功能
        //User user = mapper.getUserById();
        //测试查询多个人功能
        List<User> userList = mapper.getAllUser();
        //测试删除功能
        //int res = mapper.deleteUser();
        //提交事务
        //sqlSession.commit();
        //System.out.println("username:"+user.getUsername());
        userList.forEach(user -> System.out.println(user));
     }
}

8.添加log日志

在pom.xml文件中添加依赖

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>

        </dependency>

在resource文件夹建立日志配置文件log4j.xml,文件内容如下

等级level分为:FATAL - ERROR

litemall是一个小商场系统。相当于 Spring Boot后端 + Vue管理员前端 + 微信小程序用户前端 + Vue用户移动端。 功能: 小商城功能 1、首页 2、专题列表、专题详情 3、分类列表、分类详情 4、品牌列表、品牌详情 5、新品首发、人气推荐 6、优惠券列表、优惠券选择 7、团购 8、搜索 9、商品详情、商品评价、商品分享 10、购物车 11、下单 12、订单列表、订单详情、订单售后 13、地址、收藏、足迹、意见反馈 14、客服 管理平台功能 1、会员管理 2、商城管理 3、商品管理 4、推广管理 5、系统管理 6、配置管理 7、统计报表 快速启动 1、配置最小开发环境: MySQL JDK1.8或以上 Maven Nodejs 微信开发者工具 2、数据库依次导入litemall-db/sql下的数据库文件 litemall_schema.sql litemall_table.sql litemall_data.sql 3、启动小商场和管理后台的后端服务 打开命令行,输入以下命令 cd litemall mvn install mvn clean package java -Dfile.encoding=UTF-8 -jar litemall-all/target/litemall-all-0.1.0-exec.jar 4、启动管理后台前端 打开命令行,输入以下命令 npm install -g cnpm --registry=https://registry.npm.taobao.org cd litemall/litemall-admin cnpm install cnpm run dev 此时,浏览器打开,输入网址http://localhost:9527, 此时进入管理后台登录页面。 5、启动小商城前端 这里存在两套小商场前端litemall-wx和renard-wx,开发者可以分别导入和测试: 微信开发工具导入litemall-wx项目; 项目配置,启用“不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书” 点击“编译”,即可在微信开发工具预览效果; 也可以点击“预览”,然后手机扫描登录(但是手机需开启调试功能)。 注意: 这里只是最简启动方式,而小商场的微信登录、微信支付等功能需开发者设置才能运行, 更详细方案请参考文档。 6、启动轻商城前端 打开命令行,输入以下命令 npm install -g cnpm --registry=https://registry.npm.taobao.org cd litemall/litemall-vue cnpm install cnpm run dev 此时,浏览器(建议采用chrome 手机模式)打开,输入网址http://localhost:6255, 此时进入轻商场。 注意: 现在功能很不稳定,处在开发阶段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值