第一章:初始MyBatis框架


目录

前言

一、MyBatis框架的环境搭建

1.1下载jar文件

二、MyBatis框架的入门程序

2.1编写MyBatis框架的核心配置文件

2.2创建持久化类(POJO)和SQL映射文件

2.3创建测试类

总结


前言

        使用MyBatis框架可以方便完成持久化的“增删改查”操作,其主要内容包括MyBatis框架的搭建、MyBatis框架的系统全局配置文件、MyBatis框架的SQL映射文件,以及使用MyBatis框架完成数据库单表的简单查询操作。

一、MyBatis框架的环境搭建

1.1下载jar文件

        MyBatis的官方网站为:http://mybatis.org。

二、MyBatis框架的入门程序

2.1编写MyBatis框架的核心配置文件

        MyBatis框架的核心配置文件主要用于配置数据库连接和MyBatis运行时所需的各种特性,包含设置和影响MyBatis行为的属性。

        为了方便管理,=以后各种框架集成所需的配置文件,故需在项目工程中新建resources root目录,并在其目录下创建database.properties文件存储数据库连接配置信息,内容如下:

database.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/dsscm?serverTimezone=UTC&useUnicode=true?characterEncoding=utf-8
user=root
password=123456

        由于MyBatis默认使用log4j输出日志信息,所以要查看控制台的输出SQL语句,就需要在classpath路径下配置其日志文件。在项目resources目录下创建log4j.properties文件,编辑后的内容如下所示。

log4j.properties

log4j.rootLogger=DEBUG,CONSOLE,file
log4j.logger.cn.dsscm.dao=debug
log4j.logger.com.ibatis=debug 
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug 
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug 
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug 
log4j.logger.java.sql.Connection=debug 
log4j.logger.java.sql.Statement=debug 
log4j.logger.java.sql.PreparedStatement=debug 
log4j.logger.java.sql.ResultSet=debug 
log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=debug

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=error
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %d %c - %m%n

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern=yyyy-MM-dd
log4j.appender.file.File=log.log
log4j.appender.file.Append=true
log4j.appender.file.Threshold=error
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n

log4j.logger.com.opensymphony.xwork2=error  

        在resources目录中添加MyBatis框架的核心配置文件,默认文件名为"configuration.xml"。为了方便在框架集成时更好的区分各个配置文件,一般会将此文件命名为“mybatis-config.xml”.该文件需要配置数据库连接信息和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">
<!--通过这个配置文件完成MyBatis与数据库的连接-->
<configuration>
    <!--引入database.properties文件-->
    <properties resource="database.properties"/>
    <settings>
        <!--配置MyBatis的log实现为log4j-->
        <setting name="logImpl" value="log4j"/>
    </settings>
    <environments default="development">
        <environment id="development">
            <!--配置事务管理,采用JDBC的事务管理-->
            <transactionManager type="JDBC"/>
            <!--POOLED:MyBatis自带的数据源,-->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--将mapper加入配置文件中-->
    <mappers>
        <mapper resource="cn/dsscm/dao/UserMapper.xml"/>
    </mappers>
</configuration>

2.2创建持久化类(POJO)和SQL映射文件

        持久化类是指其实例状态需要被MyBatis持久化到数据库中的类。

        下面以用户表(tb_user)为例,定义用户POJO类,User.java的代码如下。

package cn.dsscm.pojo;

import java.util.Date;

public class User {
    private Integer id;
    private String userCode;
    private String userName;
    private String userPassword;
    private Integer gender;
    private Date birthday;
    private String email;
    private String phone;
    private String address;
    private String userDesc;
    private Integer userRole;
    private String imgPath;
    private Integer createBy;
    private Date creationDate;
    private Integer modifyBy;
    private Date modifyDate;

    private Integer age;
    private String userRoleName;

    public User() {
    }

    public User(Integer id, String userCode, String userName, String userPassword, Integer gender, Date birthday, String email, String phone, String address, String userDesc, Integer userRole, String imgPath, Integer createBy, Date creationDate, Integer modifyBy, Date modifyDate, Integer age, String userRoleName) {
        this.id = id;
        this.userCode = userCode;
        this.userName = userName;
        this.userPassword = userPassword;
        this.gender = gender;
        this.birthday = birthday;
        this.email = email;
        this.phone = phone;
        this.address = address;
        this.userDesc = userDesc;
        this.userRole = userRole;
        this.imgPath = imgPath;
        this.createBy = createBy;
        this.creationDate = creationDate;
        this.modifyBy = modifyBy;
        this.modifyDate = modifyDate;
        this.age = age;
        this.userRoleName = userRoleName;
    }

    public Integer getAge() {
        Date date = new Date();
        if (null != birthday) {
            Integer age = date.getYear() - birthday.getYear();
            return age;
        } else {
            return null;
        }
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", userCode='" + userCode + '\'' +
                ", userName='" + userName + '\'' +
                ", userPassword='" + userPassword + '\'' +
                ", gender=" + gender +
                ", birthday=" + birthday +
                ", email='" + email + '\'' +
                ", phone='" + phone + '\'' +
                ", address='" + address + '\'' +
                ", userDesc='" + userDesc + '\'' +
                ", userRole=" + userRole +
                ", imgPath='" + imgPath + '\'' +
                ", createBy=" + createBy +
                ", creationDate=" + creationDate +
                ", modifyBy=" + modifyBy +
                ", modifyDate=" + modifyDate +
                ", age=" + age +
                ", userRoleName='" + userRoleName + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

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

    public String getUserCode() {
        return userCode;
    }

    public void setUserCode(String userCode) {
        this.userCode = userCode;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPassword() {
        return userPassword;
    }

    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getUserDesc() {
        return userDesc;
    }

    public void setUserDesc(String userDesc) {
        this.userDesc = userDesc;
    }

    public Integer getUserRole() {
        return userRole;
    }

    public void setUserRole(Integer userRole) {
        this.userRole = userRole;
    }

    public String getImgPath() {
        return imgPath;
    }

    public void setImgPath(String imgPath) {
        this.imgPath = imgPath;
    }

    public Integer getCreateBy() {
        return createBy;
    }

    public void setCreateBy(Integer createBy) {
        this.createBy = createBy;
    }

    public Date getCreationDate() {
        return creationDate;
    }

    public void setCreationDate(Date creationDate) {
        this.creationDate = creationDate;
    }

    public Integer getModifyBy() {
        return modifyBy;
    }

    public void setModifyBy(Integer modifyBy) {
        this.modifyBy = modifyBy;
    }

    public Date getModifyDate() {
        return modifyDate;
    }

    public void setModifyDate(Date modifyDate) {
        this.modifyDate = modifyDate;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getUserRoleName() {
        return userRoleName;
    }

    public void setUserRoleName(String userRoleName) {
        this.userRoleName = userRoleName;
    }
}

        注意:一般情况下,保证POJO对象的属性与数据库表的字段名一致。

        继续进行SQL映射文件的创建,完成与POJO(实体类)的映射,该文件也是一个xml文件,命名为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">

<mapper namespace="cn.dsscm.pojo.User">
    <!--查询用户表记录数-->
    <select id="count" resultType="int">
        select count(*) from tb_user
    </select>
</mapper>

        注意:SQL映射文件都会对应于相应的POJO,所以一般采用POJO的名称+mapper的命名规则来进行命名。例如:UserMapper.xml.

2.3创建测试类

        (1)读取全局配置文件:mybatis-config.xml,代码为:

String resource = "mybatis-config.xml";
//获取mybatis-config.xml的输入流
InputStream is = Resources.getResourceAsStream(resource);

        (2)创建SqlSessionFactory对象,此对象可以完成对配置文件的读取,代码为:

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);

        (3)创建SqlSession对象,此对象的作用是调用mapper文件进行数据操作,需要注意的是,必须先把mapper文件引入到mybatis-config.xml中才能起效,代码为:

int count = 0;
SqlSession sqlSession = null;
//创建SqlSession对象
sqlSession = factory.openSession();
//调用mapper文件对数据进行操作,必须先把mapper文件引入到mybatis-config.xml中
count = sqlSession.selectOne("cn.dsscm.pojo.User.count");
logger.debug("UserMapperTest count--->" + count);

        (4)关闭SqlSession对象,代码为:

sqlSession.close();

完整的测试类文件如下:

public class UserMapperTest {

    private String resource = "mybatis-config.xml";
    private Logger logger = Logger.getLogger(UserMapperTest.class);
    @Test
    public void test1() {
        SqlSession sqlSession = null;
        try {
            InputStream is = Resources.getResourceAsStream(resource);
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
            sqlSession = factory.openSession();
            int count = 0;
            count = sqlSession.selectOne("cn.dsscm.pojo.User.count");
            logger.debug("UserMapperTest count--->" + count);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            sqlSession.close();
        }
    }

}

运行UserMapperTest类的test1()方法,控制台显示为:


总结

        至此,我们对MyBatis框架有了一定的了解,MyBatis框架的基本要素包括核心对象、核心配置文件和SQL映射文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值