Maven-day02(Mybatis的使用)

1.介绍Mybatis

MyBatis 是一款优秀的持久层Dao框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Java实体类)映射成数据库中的记录.
好处:方便开发使用

2.为什么使用mybatis

简化jdbc的操作以及占位符赋值以及查询结果集的封装。(以前的代码冗长)

3.Mybatis的使用

(1)第一步:引入mybatis和mysql的jar包(在pom.xml中配置依赖即可)

<dependencies>
       <dependency>
           <groupId>repMaven.org.mybatis</groupId>
           <artifactId>mybatis</artifactId>
           <version>3.5.9</version>
       </dependency>
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>8.0.16</version>
       </dependency>
</dependencies>

(2)第二步:创建mybatis的配置文件(取名为conf.xml 在resources目录下如下图)记得改value值 value值与自己的数据库匹配即可

<?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>
        <package name="com.wx.entity"/>
    </typeAliases>
    <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?serverTimezone=Asia/Shanghai" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/UserMapper.xml"></mapper>
    </mappers>
</configuration>

在这里插入图片描述
(3)第三步:创建数据库表

DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user`  (
  `userid` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `realname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`userid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of tb_user
-- ----------------------------
INSERT INTO `tb_user` VALUES (1, 'admin', '管理员');
INSERT INTO `tb_user` VALUES (2, 'ykq', '闫克起');
INSERT INTO `tb_user` VALUES (3, 'ldh', '刘德华');
INSERT INTO `tb_user` VALUES (4, 'zxy', '张学友');
INSERT INTO `tb_user` VALUES (5, 'gfc', '郭富城');

(4)第四步:创建实体类

public class User {
    private int userid;
    private String username;
    private String realname;
    //get、set、toString 构造方法这里省略 自己通过快捷键创建即可
}

(5)第五步:创建mybatis和数据库的映射文件
在resources下创建一个文件夹mapper 在里面创建一个叫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:命名空间
       可以随便起名,但是后期我们要求命名空间的值必须和所对应的dao相同
-->
<mapper namespace="qy151.user">
    <!--查询 根据id查询用户信息
          select标签用于查询的标签
             id:标签的唯一标识
             resultType: 定义返回的类型 把sql查询的结果封装到哪个实体类钟
         #{id}===表示占位符等价于?  这是mybatis框架的语法
    -->
    <select id="findById" resultType="com.ykq.entity.User">
        select * from tb_user where userid=#{id}
    </select>
</mapper>

把把映射文件注册到配置文件上 conf.xml上
在这里插入图片描述

    <mappers>
        <mapper resource="mapper/UserMapper.xml"></mapper>
    </mappers>

(6)第六步:单元测试(记得在pom.xml中添加junit相关依赖)

    @Test
    public void testQueryOne() throws Exception{
        //1.读取mybatis配置文件的内容----未来不需要写tomcat 解析配置文件
        //读取的文件为conf.xml
        Reader ra = Resources.getResourceAsReader("conf.xml");
        //2. 获取SqlSessionFactory对象
        SqlSessionFactory factor = new SqlSessionFactoryBuilder().build(ra);
        //3. 获取SqlSession对象----封装了对数据库操作的各种方法
        SqlSession session = factor.openSession();
        //selectOne()中传入两个方法
        //1.String statement, 命名空间+id----指向sql标签(UserMapper.xml中的namespace和查询语句中的id)
        //2.Object parameter 需要实参(传入的id值)
        User u = session.selectOne("com.wx.user.findById", 2);
        System.out.println(u);
        //关闭资源
        session.close();
    }

4.lombok插件的使用

(1)作用;帮助自动生成实体类的get(),set(),toString() ,构造方法。
在这里插入图片描述
下载完毕 重启即可使用
(2)在pom.xml中添加相关依赖

<dependency>
     <groupId>repMaven.org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <version>1.18.24</version>
</dependency>

(3)在实体层添加注解

@Data //get() set() toString()
@AllArgsConstructor //有参构造(所有的参数)
@NoArgsConstructor //无参构造
public class User {
    int userid;
    String username;
    String realname;
}

5.使用mybatis完成增删改查的完整代码

(1)sql语句

<?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="com.wx.user">

    <!--查询一条记录 -->
    <select id="findById" parameterType="int" resultType="com.wx.entity.User">
        select * from tb_user where userid=#{id}
    </select>

    <!--添加一条记录-->
    <insert id="add" parameterType="User">
        insert into tb_user(username,realname) values(#{username},#{realname})
    </insert>

    <!--删除-->
    <delete id="del" parameterType="int">
        delete from tb_user where userid=#{id}
    </delete>

    <!--修改-->
    <update id="update" parameterType="User">
        update tb_user set username=#{username},realname=#{realname} where userid=#{userid}
    </update>

    <!--查询全部-->
    <select id="findAll" resultType="User">
        select * from tb_user
    </select>
</mapper>

(2)单元测试代码

public class TestAll {
    
    @Test
    public void testQueryOne() throws Exception{
        //1.读取mybatis配置文件的内容----未来不需要写tomcat 解析配置文件
        //读取的文件为conf.xml
        Reader ra = Resources.getResourceAsReader("conf.xml");
        //2. 获取SqlSessionFactory对象
        SqlSessionFactory factor = new SqlSessionFactoryBuilder().build(ra);
        //3. 获取SqlSession对象----封装了对数据库操作的各种方法
        SqlSession session = factor.openSession();
        //selectOne()中传入两个方法
        //1.String statement, 命名空间+id----指向sql标签(UserMapper.xml中的namespace和查询语句中的id)
        //2.Object parameter 需要实参(传入的id值)
        User u = session.selectOne("com.wx.user.findById", 2);
        System.out.println(u);
        //关闭资源
        session.close();
    }

    @Test
    public void testAdd() throws Exception{
        Reader ra = Resources.getResourceAsReader("conf.xml");
        SqlSessionFactory factor = new SqlSessionFactoryBuilder().build(ra);
        SqlSession session = factor.openSession();
        User user = new User();
        user.setUsername("zs");
        user.setRealname("张三");
        int row = session.insert("com.wx.user.add", user);
        System.out.println(row);
        session.commit();
        session.close();
    }

    @Test
    public void testDelete() throws Exception{
        Reader ra = Resources.getResourceAsReader("conf.xml");
        SqlSessionFactory factor = new SqlSessionFactoryBuilder().build(ra);
        SqlSession session = factor.openSession();
        int row = session.delete("com.wx.user.del", 1);
        System.out.println(row);
        session.commit();
        session.close();
    }

    @Test
    public void testUpdate() throws Exception{
        Reader ra = Resources.getResourceAsReader("conf.xml");
        SqlSessionFactory factor = new SqlSessionFactoryBuilder().build(ra);
        SqlSession session = factor.openSession();
        User user = new User(2, "ls", "李四");
        int row = session.update("com.wx.user.update", user);
        System.out.println(row);
        session.commit();
        session.close();
    }

    @Test
    public void testQueryAll() throws Exception{
        Reader ra = Resources.getResourceAsReader("conf.xml");
        SqlSessionFactory factor = new SqlSessionFactoryBuilder().build(ra);
        SqlSession session = factor.openSession();
        List<User> user = session.selectList("com.wx.user.findAll");
        System.out.println(user);
        session.close();
    }
}

6.部分代码优化

在conf.xml中添加

 <typeAliases>
        <!--单独为某个实体类起别名 -->
         <typeAlias type="com.ykq.entity.User" alias="u"/>
        <!--为指定包下的实体类起别名该别名就是实体类名-->
         <package name="com.ykq.entity"/>
    </typeAliases>

在这里插入图片描述

7.在控制台添加日志方便查看sql语句

如果报错则在控制台可直接观看到sql语句的错误 方便修改
(1)在pom.xml中添加相关依赖

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

(2)在resources下创建一个文件为log4j.properties (文件名字必须叫这个名字)

log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

在这里插入图片描述
其余的配置文件如下

#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j.rootLogger=DEBUG,console,file

#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n

#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=D:/qy151/log/qy151.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n

#日志输出级别
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

配置完相关文件后直接运行相关代码即可(以查询语句为例)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值