JavaWeb(七)

一、Mybatis概念

MyBatis 是一款优秀的持久层框架,用于简化JDBC开发,解决了原生JDBC硬编码和手动封装结果集的问题。

JavaEE的三层架构分为Controller(表现层)、Service(业务层)、Mapper(持久层)。

持久层负责将数据保存到数据库的那一层代码。使用了Mybatis框架我们会将操作数据库的Java代码作为持久层。

二、Mybatis快速入门

2.1、搭建环境

2.1.1、创建user表,添加数据
create database mybatis;
use mybatis;

drop table if exists tb_user;

create table tb_user(
	id int primary key auto_increment,
	username varchar(20),
	password varchar(20),
	gender char(1),
	addr varchar(30)
);

INSERT INTO tb_user VALUES (1, 'zhangsan', '123', '男', '北京');
INSERT INTO tb_user VALUES (2, '李四', '234', '女', '天津');
INSERT INTO tb_user VALUES (3, '王五', '11', '男', '西安');
2.1.2、创建模块

 创建day04-mybatis模块,在创建好的模块中的 pom.xml 配置文件中添加依赖的坐标

<dependencies>
    <!--mybatis 依赖-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>

    <!--mysql 驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.46</version>
    </dependency>

    <!--junit 单元测试-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
        <scope>test</scope>
    </dependency>
</dependencies>
2.1.3、 创建包结构

 在 com.practice.pojo 包下创建和表对应的 User类

public class User {
    private Integer id;
    private String username;
    private String password;
    private String gender;
    private String addr;
    
    //省略了 setter 和 getter
}
2.1.4、编写核心配置文件

在resources中编写mybatis-config.xml配置文件,配置数据库的连接信息,在mybatis官网复制即可。

<?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.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!--2 加载Mapper接口和SQL语句,将给的例子注释掉。后面第三大步中配置-->
    <!--<mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>-->
</configuration>
2.1.5、编写mapper接口和SQL语句

1、在mapper包中编写UserMapper接口,在接口中编写查询所有的方法,并配置SQL语句

public interface UserMapper {

    /**
     * 查询所有用户信息
     * @Select:定义查询语句的注解,参数为SQL语句
     */
    @Select("select * from tb_user")
    List<User> selectAll();
}

 2、在mybatis-config.xml核心配置文件中加载映射配置文件

<!--加载映射配置文件-->
<mappers>
    <!--通过扫包加载该包下和所有mapper接口和接口中的SQL语句-->
    <package name="com.itheima.mapper"/>
</mappers>

核心配置文件中的内容,在使用spring框架后可以全部写到spring中的配置文件

2.1.6、单元测试使用mybatis执行查询
public class MybatisTest {

    @Test
    public void testSelectAll() throws IOException {
        //1 加载核心配置文件,获取 SqlSessionFactory对象,mybatis官网复制即可
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //2 获取 SqlSession 对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //3 获取Mapper接口代理对象。
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //4 执行方法,获取结果
        List<User> list = userMapper.selectAll();
        //5 处理结果,释放资源
        list.forEach(user -> System.out.println(user));
        sqlSession.close();
    }
}

 2.1.7、快速入门总结

步骤:

环境搭建--->核心配置文件--->Mapper接口和SQL--->单元测试方法

核心配置文件作用:

1、配置连接数据库环境信息。

​ 2、通过扫包加载和mapper接口和SQL

三、核心配置文件细节

3.1、核心配置文件标签顺序

3.1.2、environments环境配置介绍

<!--environments:用于配置多种开发环境
        default="development" :表示使用下面id="development"的环境配置 -->
<environments default="development">
    <!--environment id="development" :定义连接数据库的环境,id表示该配置的唯一标识。这个标签可以出现多次-->
    <environment id="development">
        <!--事务管理器,取值如下:
                JDBC :开启事务管理,推荐使用
                MANAGED :不使用事务管理 -->
        <transactionManager type="JDBC"/>
        <!--内置的连接池:取值如下
                POOLED:使用连接池。UNPOOLED:不使用连接池 -->
        <dataSource type="POOLED">
            <!--连接参数-->
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
        </dataSource>
    </environment>
    <!--第二个environment表示连接第二个数据库的环境-->
    <!-- 
        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
        </environment>
    -->
</environments>

3.1.3、mappers映射器配置

<!--加载映Mapper接口和SQL语句-->
<mappers>
    <!--加载一个,有多少个mapper接口就需要些多少个【不推荐】-->
    <!--<mapper class="com.itheima.mapper.UserMapper"/>-->
    <!--加载该包下所有Mapper接口中的SQL语句并存储,后期调用Mapper中方法时会执行对应SQL【推荐】-->
    <package name="com.itheima.mapper"/>
</mappers>

四、添加用户信息

4.1、在UserMapper接口中定义方法和配置SQL语句

/**
     * 添加用户信息
     * @param user
     */
@Insert("insert into tb_user values(null,#{username},#{password},#{gender},#{addr})")
void add(User user);

4.2、 单元测试类

@Test
public void testAdd() throws IOException {
    //1 加载核心配置文件,获取 SqlSessionFactory对象
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    //2 获取 SqlSession 对象
    SqlSession sqlSession = sqlSessionFactory.openSession();
    //3 获取Mapper接口代理对象,
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    //4 调用方法,得到结果
    User user=new User();
    user.setUsername("张益达");
    user.setPassword("123");
    user.setAddr("湖北武汉");
    user.setGender("男");
    userMapper.add(user);
    //5 处理结果,释放资源
    sqlSession.commit(); //提交事务*****
    sqlSession.close();
}

4.3、新增总结

1、对于新增我们需要进行事务管理,怎么做?

openSession():默认开启事务,进行增删改操作后需要使用 sqlSession.commit(); 手动提交事务

openSession(true):可以设置为自动提交事务(关闭事务)

2、修改和删除也要进行事务管理。

五、注意事项

5.1、参数占位符:#{}:执行SQL时,会将#{}占位符替换为?,将来自动设置参数值

5.2、增删改需要提交事务,可以设置自动提交事务。

5.3、以上的内容主要是使用注解的方式在mybits中进行sql操作,JavaWeb(八)和JavaWeb(九)中将介绍使用xml映射配置文件在mybits中进行sql操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值