【第二章:Java核心技术解析】第15节:Java框架 - MyBatis必会知识点


大家好,很高兴我们可以继续交流学习Java相关框架知识点。在上一小节中,我们对当前热门的Spring框架进行了简单的介绍,重点阐述了其AOP和IOC两种关键技术。

本小节中,我们主要对当前热门的持久层框架MyBatis来进行介绍。MyBatis是一个优秀的持久层框架,基本上已经取代了Hibernate成为了当前市场上的主流持久层框架。在日常的工作中,我们经常在使用Spring和MyBatis来搭建我们的服务。所以,熟练的使用并且掌握框架的相关技术原理对于我们开发效率也是很有帮助的。接下来,我们先来看一个MyBatis框架的使用案例吧.

Demo展示:使用MyBatis+Druid连接MySQL数据库

数据库中表的建立, 建立一张测试表mybatis_test,语句如下:

create table mybatis_test(
id int primary key, 
k int not null, 
name varchar(16),
index (k))engine=InnoDB;

插入一条记录,语句如下:

 insert into mybatis_test values(1,1,'zhangsan');

图片说明

建立完整的项目,结构如下所示:

图片说明

接下来,我们分别给出各个文件的内容:

User实体类:

package com.model;

public class User {
    private int id;
    private int k;
    private String name;

    public int getId() {
        return id;
    }

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

    public int getK() {
        return k;
    }

    public void setK(int k) {
        this.k = k;
    }

    public String getName() {
        return name;
    }

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

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

自定义的Druid数据库连接池MyDruidDataSourceFactory :

package com.factory;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.ibatis.datasource.DataSourceFactory;
import javax.sql.DataSource;
import java.util.Properties;

public class MyDruidDataSourceFactory implements DataSourceFactory {
    private DataSource dataSource;

    public DataSource getDataSource() {
        return this.dataSource;
    }

    public void setProperties(final Properties props) {
        try {
            this.dataSource = DruidDataSourceFactory.createDataSource(props);
        } catch (final RuntimeException e) {
            throw e;
        } catch (final Exception e) {
            throw new RuntimeException("init datasource error", e);
        }
    }
}

映射器的定义:

package com.mapper;
import com.model.User;

public interface UserMapper {
    public User getUserInfo(int id);
}

UserMapper.xml文件的定义

<?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 与对应接口的全路径严格对应-->
<mapper namespace="com.mapper.UserMapper">

    <select id="getUserInfo" parameterType="int" resultType="User">
         select * from mybatis_test where id=#{id}
    </select>

</mapper>

MyBatis配置文件mybatis_config.xml文件:

<?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>

    <!--定义别名-->
    <typeAliases>
        <typeAlias type="com.model.User" alias="User" />
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="com.factory.MyDruidDataSourceFactory">
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/test" />
                <property name="username" value="root" />
                <property name="password" value="123" />
                <property name="maxActive" value="30" />  <!--接下来是Druid连接池的属性配置-->
                <property name="initialSize" value="30" />
                <property name="minIdle" value="30" />
                <property name="testWhileIdle" value="false" />
            </dataSource>
        </environment>
    </environments>

    <!--引入定义好的UserMapper文件-->
    <mappers>
        <mapper resource="UserMapper.xml" />
    </mappers>

</configuration>

依赖配置pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ywq</groupId>
    <artifactId>mybatis.test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!--MyBatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifa

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Java开发岗高频面试题全解析 文章被收录于专栏

<p> Java开发岗高频面试题全解析,专刊正文共计31节,已经全部更新完毕。专刊分9个模块来对Java岗位面试中的知识点进行解析,包括通用面试技能,Java基础,Java进阶,网络协议,常见框架以及算法,设计模式等。专刊串点成面的解析每个面试题背后的技术原理,由浅入深,循序渐进,力争让大家掌握面试题目的背后的技术原理,摒弃背题模式的陋习。 专刊详细信息,请查阅专刊大纲和开篇词的介绍。 本专刊购买后即可解锁所有章节,故不可以退换哦~ </p> <p> <br /> </p>

全部评论
面试的时候经常问我连接池配置 我觉得也算高频了
2 回复 分享
发布于 2019-12-13 15:21
老哥 请问为什么会报 sqlsession错误啊,然后 找了一下usermapper.xml也没发现错误😂
1 回复 分享
发布于 2019-12-16 09:17
n
点赞 回复 分享
发布于 2021-04-22 02:44
public interface UserMapper {     public List<User> getUsers();     public List<User> getUsers(@Param("id") Integer id); } <mapper namespace="com.yxhpy.dao.UserMapper">     <select id="getUsers" resultType="user">         select * from user         <where>             <if test="id">                 id=#{id}             </if>         </where>     </select> </mapper> 我试了一下重载,确实可以重载啊,是我打开方式不对吗?
点赞 回复 分享
发布于 2021-03-16 19:54
打卡
点赞 回复 分享
发布于 2021-02-25 19:52
打卡 一刷。
点赞 回复 分享
发布于 2020-09-11 10:06
二刷打卡
点赞 回复 分享
发布于 2020-08-22 11:21
大佬,是否可以写点java web和hibernate的相关内容呢
点赞 回复 分享
发布于 2020-05-25 16:37
你好,请问校招对框架的考察多吗,比如像mybatis这种常用框架需要掌握到什么程度
点赞 回复 分享
发布于 2020-05-11 21:36
打卡
点赞 回复 分享
发布于 2020-02-18 22:43
打卡
点赞 回复 分享
发布于 2020-02-14 22:08
打卡
点赞 回复 分享
发布于 2020-01-05 22:15
大佬别鸽啊,求更
点赞 回复 分享
发布于 2019-12-12 01:54
还更新嘛?
点赞 回复 分享
发布于 2019-12-11 00:20

相关推荐

07-02 22:46
门头沟学院 Java
码农索隆:hr:“管你投没投,先挂了再说”
点赞 评论 收藏
分享
Lorn的意义:1.你这根本就不会写简历呀,了解太少了 2.你这些项目经历感觉真的没啥亮点啊,描述的不行,重写书写一下让人看到核心,就继续海投 注意七八月份ofer还是比较多的,越往后机会越少,抓住时机,抓紧检查疏漏,加油查看图片
点赞 评论 收藏
分享
评论
6
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务