探索MyBatis:简化Java数据操作的利器

Mybatis(上)

该文章介绍了SSM中的MyBatis,它不仅允许开发者灵活地编写SQL,优化查询,还能显著提升开发效率。

该文章将清晰地结构化,涵盖MyBatis的基本概念、优势、使用方法以及常见问题,方便你轻松跟随。

此外,我们鼓励读者分享自己的经验和提问,以增加互动性。

简介

Mybatis是一款优秀的持久层框架。

Mybatis支持定制化SQL、存储过程以及高级映射。

MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。

持久化

持久化就是将程序的数据在持久状态和瞬时状态转化的过程内存因为断电即失的特点,而有一些对象,不能让它丢掉,所以需要持久化。内存又太贵了,不能将数据持久放在内存中。

持久层

完成持久化工作的代码块

第一个Mybatis程序实现 (思路大纲)

使用Mybatis对数据库进行操作

1.配置环境

导入依赖:

首先需要导入Mybatis依赖和Mysql依赖,才能使用Mybatis和连接Mysql。

之后需要一个sqlSession对象,这需要写一个Mybaits工具类来返回一个sqlSession对象。

Mybatis工具类:

这个Mybatis工具类的实现,是为了返回一个sqlSession对象,需要一个sqlSessionFactory;

而一个sqlSessionFactory对象需要通过 SqlSessionFactoryBuilder 获得;

而 SqlSessionFactoryBuilder 则可以从 XML 配置文件进行加载。

Mybatis核心配置文件:

这样我们就需要一个Mybatis的核心配置文件XML。

这个XML文件需要进行事务管理和数据库连接配置,同时还需要要包含一组映射器(mapper),这些映射器的 XML文件包含了 SQL 代码和映射定义信息。

环境配置完毕!!!

2.编写代码

实体类:

之后就是编写代码, 创建一个与数据库表对应的实体类。

比如针对数据库查询select,首先写一个实体类,内容是包括select的表的各个字段的信息。

Mapper接口

之后写一个Mapper映射接口,自定义的,里面写一个方法用来返回结果集的。

不过每个Mapper接口都需要注册,就是在上述的Mybatis中注册,才能使用。

对应的XML文件

之后通过写一个配置文件,在配置文件中写SQL的相关操作,对接Mapper接口,用来返回结果集。

MyBatis 会根据 Mapper 接口方法的返回类型自动将查询结果映射到相应的 Java 对象。

2.测试

使用MyBatis

获取 sqlSesion对象,通过MyBatis工具类返回一个sqlSession对象;

使用SqlSession获取Mapper接口的实例;

通过该实例方法的调用,执行相关操作,获取结果集;

关闭SQL Session。

第一个Mybatis程序实现 (代码实现)

1.配置环境:

  1. 导入依赖,解决 Maven 配置文件未被导出或生效的问题(build)
    <dependencies>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.12</version>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>8.0.33</version>        </dependency>        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis</artifactId>            <version>3.5.16</version>        </dependency>    </dependencies>
<!--在子部写-->    <build>        <resources>            <resource>                <directory>src/main/resources</directory>                <includes>                    <include>**/*.properties</include>                    <include>**/*.xml</include>                </includes>                <filtering>true</filtering>            </resource>            <resource>                <directory>src/main/java</directory>                <includes>                    <include>**/*.properties</include>                    <include>**/*.xml</include>                </includes>                <filtering>true</filtering>            </resource>        </resources>    </build>
  1. 编写Mybatis工具类,并配置Mybatis核心xml文件,mapper映射器可以候补!
public class MybatisUtils {    private static SqlSessionFactory sqlSessionFactory;    static {        try {            String resource = "mybatis-config.xml";            InputStream inputStream = Resources.getResourceAsStream(resource);            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        } catch (IOException e) {            throw new RuntimeException(e);        }    }    public static SqlSession getSqlSession() {        return sqlSessionFactory.openSession();    }}
<?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>    <environments default="development">        <environment id="development">            <transactionManager type="JDBC"/>            <dataSource type="POOLED">                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>                <property name="username" value="root"/>                <property name="password" value="111111"/>            </dataSource>        </environment>    </environments>    <mappers>        <mapper resource="org/example/Dao/UserMapper.xml"/>    </mappers></configuration>

编写代码

  1. 编写一个实体类,与数据库的表相对应。
//实体类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 + '\'' +                '}';    }}
  1. 创建一个mapper接口,在里面编写一个方法,用来返回结果集。
public interface UserDao {    public List<User> getUserList();}
  1. 配置一个与mapper接口对应的xml文件,对应接口、返回类型,在相应标签内写SQL语句即可。MyBatis 会根据 Mapper 接口方法的返回类型自动将查询结果映射到相应的 Java 对象。
<?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.example.Dao.UserDao">    <select id="getUserList" resultType="org.example.pojo.User">        select * from mybatis.user    </select></mapper>

测试

  1. 创建一个sqlSession对象,用Mybatis工具类返回值对象值。
  2. 通过sqlSession对象的getMapper()方法,获取一个Mapper接口的实例对象。这样通过动态代理获取了 Mapper 接口的实现,以便于进行数据库操作。
  3. 调用这个实例对象的方法,这个方法调用会触发 MyBatis 执行与 getUserList() 相关联的 SQL 语句。执行后,会将结果集通过返回类型映射成一个Java对象,如List<表对应的对象>,返回结果。
  4. 关闭sqlSession,释放资源。
public class testDao {    @Test    public void test() {        //获得SqlSession对象        SqlSession sqlSession = MybatisUtils.getSqlSession();        //方式一执行SQL        UserDao mapper = sqlSession.getMapper(UserDao.class);        List<User> userList = mapper.getUserList();        for (User user : userList) {            System.out.println(user);        }        //关闭sqlSession        sqlSession.close();    }}

总结

使用Mybatis对数据库进行操作

配置环境:

  1. 导入依赖,解决解决 Maven 配置文件未被导出或生效的问题(builder)
  2. 编写Mybatis工具类,并配置Mybatis核心xml文件,mapper映射器可以候补!

编写代码

  1. 编写一个实体类,与数据库的表相对应。
  2. 创建一个mapper接口,在里面编写一个方法,用来返回结果集。
  3. 配置一个与mapper接口对应的xml文件,对应接口、返回类型,在相应标签内写SQL语句即可。MyBatis 会根据 Mapper 接口方法的返回类型自动将查询结果映射到相应的 Java 对象。

测试

  1. 创建一个sqlSession对象,用Mybatis工具类返回值对象值。
  2. 通过sqlSession对象的getMapper()方法,获取一个Mapper接口的实例对象。这样通过动态代理获取了 Mapper 接口的实现,以便于进行数据库操作。
  3. 调用这个实例对象的方法,这个方法调用会触发 MyBatis 执行与 getUserList() 相关联的 SQL 语句。执行后,会将结果集通过返回类型映射成一个Java对象,如List<表对应的对象>,返回结果。
  4. 关闭sqlSession,释放资源。
#SSM框架##Java##数据库##Java后端#
Java面试题 文章被收录于专栏

本专栏汇总了大量的Java面试题和Java面经,希望对大家有所帮助!

全部评论

相关推荐

面经:‌自我介绍‌:‌请简要介绍自己的教育背景、‌实习经历及技能特长。‌‌项目经验‌:‌详细描述参与过的项目,‌包括项目背景、‌技术栈、‌个人职责及成果。‌‌技术深度‌:‌针对应聘岗位,‌考察相关技术的掌握程度,‌如Java、‌C++等编程语言及数据库知识。‌‌问题解决能力‌:‌询问在项目开发中遇到的问题及解决方案。‌‌团队合作与领导力‌:‌了解应聘者在团队中的角色及贡献,‌以及面对团队挑战时的应对策略。‌‌职业规划‌:‌询问应聘者对未来的职业发展规划及对公司和岗位的理解。‌‌加班与出差态度‌:‌了解应聘者对加班和短期出差的看法及适应能力。‌【25届可投!年薪最高达30万!金融科技行业龙头—金证科技2025&nbsp;届校招】【公司简介】金融科技行业头部公司,交易所、证券、基金、期货、银行和信托等机构整体解决方案的首选服务商,上市公司(600446,SH),&nbsp;AA级证券公司交易系统占比&nbsp;50%,余额宝/理财通核心技术搭建。【校招岗位】C/C++/Java/Web,测试/实施/维护,销售【薪酬福利】有竞争力的薪资,年度调薪,六险一金,两年免费住宿/租房补米哈游助,周末双休,校招生专属培训方案,高潜人才晋升通道等!【工作城市】深圳/北京/上海/成都/长沙等【内推链接】https://szkingdom1.zhiye.com/campus/jobs?shareId=aad2d68e-39a9-4a2e-ae2c-691ef2e2ffbd&amp;shareSource=2【推荐码】ESKPT0一键投递简历,内推求职快人亿步!投递的uu留下姓名缩写+岗位,我会尽力跟进~
金证股份
|
校招
|
7个岗位
点赞 评论 收藏
分享
面经:总共28分钟,面试官不凶但也不温柔1、自我介绍2、讲一下项目3、看你的很多项目都用了springboot,讲一下springboot是什么以及特点4、你的项目数据库是怎么设计的5、讲一下你的项目在进行测试的时候发现了哪些问题6、讲一下你怎么使用jmeter进行的性能测试7、发现吞吐量过小和进程阻塞,要怎么进行优化8、讲一下你开发的那个游戏冰冻子弹射出后对怪物造成影响的逻辑9、看你也有开发经历,为什么不从事后端开发或游戏开发,而来应聘测试10、作为一个测试工程师,当你发现一个bug时你要怎么处理11、你玩哪些游戏,发现过哪些bug12、你刚刚说QQ飞车手游源极之星机甲的双特性bug,为它设计测试用例点点互动25届锐计划精英校招全球启动!【项目简介】“锐计划”精英校招是点点互动面向校园顶尖人才推出的招募及培养专项。我们在全球范围内持续吸引和招募极端热爱游戏创作,乐观坚韧、自驱创新、共情共赢、拥抱变化的优秀青年人才,加入游戏行业,共创游戏未来!【开放岗位】游戏策划、广告创意策划、海外广告投放、游戏美术设计、游戏前端工程师、游戏后端工程师【薪酬待遇】行业TOP薪酬与福利(商业保险、超长年假、节日福利等)+顶尖导师指导与优秀的团队相伴+定制化的培养+丰富的项目实践机会【内推码】EV3P18【内推链接】https://career.centurygames.cn/campus/jobs?shareId=d5298fc3-3525-44cc-bbec-1cfadbc68946&amp;shareSource=1投递得uu留下姓名缩写和岗位~会全程跟进~
点点互动
|
校招
|
10个岗位
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务