Mybatis学习(上)
1、初识Mybatis
1.1、Mybatis介绍
什么是Mybatis呢?Mybatis是一个数据持久层的框架,它可以帮助我们很好的将Java与数据库连接在一起,这使得我们不用把精力花在jdbc的配置上,而是专注于sql语句。
1.2、Mybatis执行流程
读取MyBatis 配置文件mybatis-config.xml,加载数据源、事务等
加载映射文件mapper.xml
定义SQL语句,在上一步的文件中加载。
创建会话工厂。(SqlSessionFactory)
创建会话(SqlSession)
通过Executor 操作数据库
输入参数和输出结果
2、Mybatis入门
可以跟着我的流程一起做,我会提供部分的代码
2.1、需求
-
根据用户id(主键)查询用户信息
-
根据用户名称模糊查询用户信息
-
添加用户
-
删除用户
-
更新用户
只需要实现控制台输出即可
2.2、环境搭建
创建一个普通的Maven项目
sql语句:
CREATE TABLE tb_user(
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20),
password VARCHAR(50),
sex VARCHAR(2),
brithday DATE,
address VARCHAR(200)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
添加依赖:
<?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.suke</groupId><version>1.0-SNAPSHOT</version><artifactId>mybatis-demo1</artifactId><!--添加mybatis的依赖--><dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><!--mysql的数据库驱动jar--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></dependency><!--log4j--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies></project>
2.3、Mybatis配置文件
在resource包下,创建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><!-- 和spring整合后 environments配置将废除--><environments default="development"><!-- 可以配置多个environment --><environment id="development"><!-- 使用jdbc事务管理--><transactionManager type="JDBC" /><!-- 数据库连接池--><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/shopdb" /><property name="username" value="root" /><property name="password" value="123" /></dataSource></environment></environments>
</configuration>
2.4、编写实体类
User实体类
import lombok.Data;
import java.io.Serializable;
import java.util.Date;@Data
public class User{//实例类的属性的数据类型写包装类型private Integer userId;private String name;private String password;private String sex;//实体类的日期类型一定使用java.util.Dateprivate Date brithday;private String address;}
2.7、编写UseMapper接口
package com.v.demo.mapper;import com.v.demo.pojo.User;
import java.util.List;public interface UserMapper {List<User> findUserById();
}
2.6、sql映射文件
我们的实体类是User,所以可以把User类的映射文件改为UserMapper.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="com.v.demo.mapper">
<!-- 根据id获取用户信息 --><select id="findUserById" parameterType="int" resultType="org.csmf.mybatis.entity.User">select * from t_user where id = #{id}</select>
</mapper>
2.6、将映射文件添加到Mybatis配置文件
写在Mybatis配置文件里,写在最下面,在</configuration>之上
<mappers><mapper resource="UserMapper.xml"/>
</mappers>
2.7、测试程序
import java.io.IOException;
import java.io.InputStream;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.csmf.mybatis.entity.User;
import org.junit.Test;/*** 测试使用Mybatis操作数据库* @author v**/
public class UserDaoTest {@Testpublic void testFindUserById(){InputStream inputStream = null;try {//0.加载Mybatis的主配置文件// Resources.getResourceAsStream()获取classpath下面的资源inputStream = Resources.getResourceAsStream("mybatis-config.xml");} catch (IOException e) {e.printStackTrace();}//1.通过Mybatis的主配置文件得到SqlSessionFactory对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.通过SqlSessionFactory得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();//3.通过SqlSession操作数据库//selectOne(): //第一个参数是Statement的Id也就是sql映射文件中的select,insert,,标签的Id //第二个参数是输入参数User user = sqlSession.selectOne("findUserById",2);//输出System.out.println(user.getUsername()+"-->"+user.getBrithday());//4.关闭SqlSessionsqlSession.close();}
}
2.8、根据用户姓名模糊查询
<!-- 根据姓名模糊查询 --><select id="findUserByName" parameterType="string" resultType="com.v.demo.pojo.User">select * from tb_user where username like #{name}</select>
id :与UserMapper接口中的方法一一对应
parameterType :接收数据类型
parameterType :返回数据类型
参数用#{参数名}表示
2.9、 添加用户
<insert id="addUser" parameterType="org.csmf.mybatis.entity.User">insert into tb_user(username,password, sex,birthday, address)values(#{username},#{password},#{sex},#{brithday},#{address})</insert>
这些更多的是一种参考,如果不会写Mybatis格式的sql,可以自己写完sql语句后,让AI转换一下
简单的sql运用就到这里,