Mybatis初学者的一篇文章
一、Mybatis到底是什么呢?
在它的官方文档写的很清楚
1、MyBatis 是一款优秀的持久层框架
2、它支持自定义 SQL、存储过程以及高级映射
3、MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作
4、MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
这就是Mybatis!!!
二、那到底如何使用呢
就先从创建Myabtis项目开始吧
1、首先New一个Maven的项目,新创建的Mybatis项目中会包含这么多文件夹
2、我们需要在全局的pom文件中加入Mybatis、Mysql的驱动。
<dependencies>
<!-- mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<!-- mybatis-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
</dependencies>
大家可能会有疑惑junit是什么东西,说实话小编也不知道,所以希望感兴趣的小伙伴可以自己查一下,有收获了之后记得告诉我哦,嘻嘻。
3、在resources文件夹中新建一个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核心配置文件-->
<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/batis?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 每一个Mapper.xml都需要在Mybatis核心配置文件中注册-->
</configuration>
这点东西就不用我说了吧,大家一看就能看懂,这不就是配置数据源嘛,连接数据库必须的东西啦!开始我们是这样配置的。还有一个办法可以动态配置数据源,在文章的结尾,我会告诉大家如何动态配置数据源,现在我们继续往下走…
4、看好右侧我选的是Database选项,然后我们再点击+号选择Mysql,当然我使用的是Mysql数据库,可能有其他小伙伴使用的数据库不是Mysql,大家按照自己使用的数据库来选择嘛。
5、到这里之后,大家输入完用户名密码之后会看到Database这里让填的就是你创建的一个库的库名,我这里叫batis,当我们看到URL这一栏的时候会不会想起我们配置数据源的时候的url,那这里的url就是数据源需要配置的url,所以我们直接复制过去就行至于我加的一些参数有些是解决地区问题的,有些是解决乱码问题的所以安全起见希望小伙伴也加上吧!!配置完之后我们点击Test Connection来测试一下能不能连接上我们的数据库,如果连不上那就应该查看一下到底有没有这个库或者是用户名密码对不对。
连接上之后我们就可以写第一个Mybatis程序了。
6、在这之前我们先创建一个简单的数据表吧,前提是在我们连接的这个库中创建的sql表哦
##创建user表
CREATE TABLE `user` (
`id` INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
`pwd` INT(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
##插入数据
INSERT INTO `user` (`id`, `name`,`pwd`) VALUES (1, "张飞",123456);
7、首先我们配置完Mybatis之后需要使用它吧,那如何使用呢,大家也就按照我的来吧!!包名大家按照自己的来就行。比较懒得同学,我已经把代码放在图片下面了,直接复制即可。
private static SqlSessionFactory sqlSessionFactory;
//static代码块初始就加载
static {
try {
//获取SqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
/*既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
你可以通过 SqlSession 实例来直接f执行已映射的 SQL 语句。
*/
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
8、我们就先写一个实体类吧,在pojo文件夹中创建一个User的一个实体类,自己生成是最好的使用快捷键Alt+Insert键就可以,不过我下面也有代码的
private int id;
private String name;
private int 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 int getPwd() {
return pwd;
}
public void setPwd(int pwd) {
this.pwd = pwd;
}
public User(){
}
public User(int id, String name, int pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd=" + pwd +
'}';
}
9、然后我们在dao文件夹中创建一个UserMapper的接口文件,这里面基本的增删改查语句是有的!测试嘛,那就要测得明明白白的。
//查询全部用户
List<User> getUserList();
//根据id获取用户
User getUserById(int id);
// User getUserById2(Map<String,Object> map);
//插入一个数据
int addUser(User user);
//万能的map
int addUser2(Map<String,Object> map);
//修改一个数据
int upDataUser(User user);
//删除一个数据
int deleteData(int id);
10、然后我们要在dao层中先创建一个UserMapper.xml文件,记得namespace中的路径是自己的包路径哈
<?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=绑定一个对应的Mapper/Dao接口-->
<mapper namespace="com.tjs.dao.UserMapper">
<!-- 查询语句-->
<!--id:就是对应的namespace中的方法;-->
<!--resultType:sql语句执行的返回值!-->
<!--parameterType:参数类型-->
<select id="getUserList" resultType="com.tjs.pojo.User">
select * from batis.user
</select>
<select id="getUserById" parameterType="int" resultType="com.tjs.pojo.User">
select * from batis.user where id = #{id}
</select>
<!-- <select id="getUserById2" parameterType="map" resultType="com.tjs.pojo.User">-->
<!-- select * from batis.user where id = #{userid}-->
<!-- </select>-->
<!--对象中的属性可以直接取出来
传递map中的key-->
<insert id="addUser" parameterType="com.tjs.pojo.User">
insert into batis.user (id,name,pwd) values (#{id},#{name},#{pwd});
</insert>
<insert id="addUser2" parameterType="map">
insert into batis.user (id,name,pwd) values (#{userid},#{username},#{password});
</insert>
<update id="upDataUser" parameterType="com.tjs.pojo.User" >
update batis.user set name=#{name},pwd=#{pwd} where id=#{id};
</update>
<delete id="deleteData" parameterType="int">
delete from batis.user where id=#{id};
</delete>
</mapper>
11、在test\java文件夹下创建和上面的包名一摸一样的哈,记得创建完的包肯定是可以展开的哈
public class UserDaoTest {
@Test
public void getUserList(){
//第一步:获取sqlsession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//方式一:getMapper
UserMapper userDao = sqlSession.getMapper(UserMapper.class);
List<User> userList = userDao.getUserList();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
@Test
public void getUserById(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User userById = mapper.getUserById(2);
System.out.println(userById);
sqlSession.close();
}
//增删改需要提交事务
@Test
public void add(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int addSuccess = mapper.addUser(new User(4, "马宇", 123));
if(addSuccess>0){
System.out.println("插入成功!");
}
sqlSession.commit();
sqlSession.close();
}
@Test
public void upData(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.upDataUser(new User(2,"我的",123456));
sqlSession.commit();
sqlSession.close();
}
@Test
public void DeleteUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteData(2);
sqlSession.commit();
sqlSession.close();
}
@Test
public void addUser2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<String, Object>();
map.put("userid",3);
map.put("username","关羽");
map.put("password",123456789);
mapper.addUser2(map);
sqlSession.commit();
sqlSession.close();
}
}
12、到这里我们还不能运行,因为运行肯定报错的为什么呢,记得我们第3步的代码中有这样一句话
“每一个Mapper.xml都需要在Mybatis核心配置文件中注册”
所以我们要把我们自己写的UserMapper.xml文件配置到mybatis-config.xml文件中去
在mybatis-config.xml文件中的最后一行配置一下代码,这里的路径是寻找自己创建的UserMapper.xml文件的
<!-- 每一个Mapper.xml都需要在Mybatis核心配置文件中注册-->
<mappers>
<mapper resource="com/tjs/dao/UserMapper.xml"/>
</mappers>
13、这样还不够,我们要在局部pom文件和全局pom文件中的最后加入下面这点配置,代码在下面直接复制就好了,我的注释也写了,希望大家可以不要嫌弃注释少。
<!-- 在build中配置resources,来防止我们资源导出失败的问题-->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
14、大家记得,配置完pom文件后,一定要刷新maven文件!!!很重要,不刷新maven文件会导致一些配置找不到的问题!!!!很重要!!!
最后我们就可以运行测试了,点击蓝色的按钮就可以运行了,运行之后我们就可以在控制台看到我们插入在数据库中的数据了。
动态配置数据源
1、很简单按照我写的方式去写,希望大家把配置的注释可以看一下,
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--configuration核心配置文件-->
<configuration>
<!--引入外部配置文件-->
<properties resource="db.properties"/>
<settings>
<!--配置日志,标准的日志工厂实现-->
<setting name="logImpl" value="LOG4J"/>
</settings>
<!--可以给实体类起别名-->
<typeAliases>
<!--实体类比较少的时候使用typeAlias-->
<!-- <typeAlias type="com.tjs.pojo.User" alias="User"/>-->
<!--实体类比较多的时候使用package起别名,自动使用实体类的小写-->
<package name="com.tjs.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/batis?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
-->
<mappers>
<mapper resource="com/tjs/dao/UserMapper.xml"/>
</mappers>
</configuration>
2、在resources文件夹下创建一个db.properties的文件
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/batis?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
username="自己的数据库用户名"
password="自己的数据库密码"
这里的配置大家就按照自己的来吧
3、我们看到这个xml文件放到dao文件夹中是有点儿不太友好的样子。
所以我们在resources文件夹中创建一个包路径,这个包路径和我们呢上面创建的com.tjs.dao一样然后将UserMapper.xml文件放到里面,然后在mybatis-config.xml文件的最后一行修改mapper中的配置,修改为
<mappers>
<mapper class="com.tjs.dao.UserMapper.xml"/>
</mappers>
Mybatis基本配置以及基本增删改查完结!!!
这里不算是标题,这只是提醒同学们配置完pom文件后一定要刷新maven ! ! ! !
如果有小伙伴根据我的步骤配置完之后什么东西都和我的一样没有出来结果,大家可以私信我,或者是评论区里留言,我看到一定会回复大家的。这也是我一个初学者的心得,希望大佬不要喷我,我的初衷也是希望有更多像我一样在初学Mybatis中的同学得到帮助!!!谢谢。
记得有问题留言或者私信我哈!!!溜了溜了
我们下次再见,希望下次见到的时候别来无恙,我们都可以更上一层楼。
最后祝大家工作、学习顺利。