学习笔记(狂神MyBatis P1-P10)"/>
学习笔记(狂神MyBatis P1-P10)
学习笔记(狂神MyBatis)
学习笔记源码下载地址
1、搭建环境测试第一个MyBatis程序
创建数据库
CREATE DATABASE `mybatis`;USE `mybatis`;DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (
`id` int(20) NOT NULL,
`name` varchar(30) DEFAULT NULL,
`pwd` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into `user`(`id`,`name`,`pwd`) values (1,'狂神','123456'),(2,'张三','abcdef'),(3,'李四','987654');
a、创建一个普通的maven项目
b、导入maven依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi=""xmlns=".0.0"xsi:schemaLocation=".0.0 .0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>StudyMyBatis</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><modules><module>MyBatis01</module></modules><properties><maven.compiler.source>16</maven.compiler.source><maven.compiler.target>16</maven.compiler.target></properties><!--导入依赖--><dependencies><!--MySQL驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.25</version></dependency><!--mybatis驱动--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><!--junit驱动--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version></dependency></dependencies>
</project>
c、创建一个模块,编写核心配置文件mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN"".dtd">
<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/mybatis?userSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"/><property name="username" value="root"/><!--根据自己的数据库用户名密码更改--><property name="password" value="root"/></dataSource></environment></environments><mappers><!--和mapper.xml中的namespace的路径相同,注意用 / 隔开--><mapper resource="mapper/UserMapper.xml"/></mappers>
</configuration>
d、编写工具类MybatisUtils
(固定不变)
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 java.io.IOException;
import java.io.InputStream;public class MybatisUtils {static SqlSessionFactory sqlSessionFactory = null;static {try {//使用Mybatis第一步 :获取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 命令所需的所有方法。public static SqlSession getSqlSession() {return sqlSessionFactory.openSession();}
}
e、业务代码
- 实体类
public class User {//实体类 字段名和数据库字段名相同private int id; //idprivate String name; //姓名private String pwd; //密码//有参无参构造//get,set方法//toString
}
- mapper接口
import java.util.List;
import java.util.Map;public interface UserMapper {List<User> getUserList();}
- 接口配置文件
UserMapper.xml
(之前的实现类)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"".dtd"><!--namespace的值必须写对和核心配置文件中的mappers路径相同用 . 隔开-->
<mapper namespace="mapper.UserMapper">
<!--id和接口的方法名相同,resultTypeSql语句执行的返回值,parameterType:参数类型--><select id="getUserList" resultType="pojo.User">select * from mybatis.user</select>
</mapper>
- 编写junit测试
@Testpublic void selectUser() {//1.获取SqlSession对象SqlSession sqlSession = MybatisUtils.getSqlSession();//2.执行SQL//getMapperUserMapper mapper = sqlSession.getMapper(UserMapper.class);//以上两行固定不变List<User> userList = mapper.getUserList();for (User user : userList) {System.out.println(user);}//关闭sqlSessionsqlSession.close();}
如果出现错误提示为:org.apache.ibatis.binding.BindingException: Type interface com.kuang.dao.UserDao is not known to the MapperRegistry.
需要在pom.xml中导入以下配置
<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>
2、简单操作数据库
- insert
1、编写接口
public interface UserMapper {//查询所有用户List<User> getUserList();//插入用户void addUser(User user);
}
2、mapper的xml文件SQL语句
<insert id="addUser" parameterType="pojo.User">insert into mybatis.user (id, name, pwd)values (#{id}, #{name}, #{pwd})</insert>
3、测试
@Testpublic void addUser() {SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);mapper.addUser(new User(6, "liuliuliu", "666"));//增删改一定要提交事务sqlSession.commit();//关闭sqlSessionsqlSession.close();}
- update
1、编写接口
public interface UserMapper {//查询所有用户public List<User> getUserList();//更改用户void updateUser(User user);
}
2、mapper的xml文件SQL语句
<update id="updateUser" parameterType="pojo.User">update mybatis.userset name =#{name},pwd=#{pwd}where id = #{id};</update>
3、测试
@Testpublic void updateUser() {SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);mapper.updateUser(new User(4, "哈哈哈", "111"));//增删改一定要提交事务sqlSession.commit();//关闭sqlSessionsqlSession.close();}
- Delete
1、编写接口
public interface UserMapper {//查询所有用户public List<User> getUserList();//删除用户void deleteUser(int id);
}
2、mapper的xml文件SQL语句
<delete id="deleteUser" parameterType="int">deletefrom mybatis.userwhere id = #{id}</delete>
3、测试
@Testpublic void deleteUser() {SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);mapper.deleteUser(4);//增删改一定要提交事务sqlSession.commit();//关闭sqlSessionsqlSession.close();}
- 万能Map
1、编写接口
public interface UserMapper {//查询所有用户public List<User> getUserList();//用万能Map插入用户void addUser2(Map<String, Object> map);
}
2、mapper的xml文件SQL语句
<insert id="addUser2" parameterType="map">insert into mybatis.user (id, name, pwd)values (#{userid}, #{username}, #{userPwd})</insert>
3、测试
@Testpublic void addUser2() {SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);HashMap<String, Object> map = new HashMap<String, Object>();map.put("userid", 5);map.put("username", "赵武");map.put("userPwd", 123);mapper.addUser2(map);//提交事务sqlSession.commit();//关闭资源sqlSession.close();}
3、配置文件解析mybatis-config.xml
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。
配置文档的顶层结构如下:
environments
可以配置成适应多种环境
例如下图:
MyBatis默认的事务管理器就是JDBC ,连接池:POOLED
properties
可以通过properties属性来实现引用配置文件(优先使用外部配置文件的内容)
在resources目录下编写一个配置文件db.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?userSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username=root
password=root
在核心配置文件mybatis-config.xml
中引入
<!--引用外部配置文件-->
<properties resource="db.properties"></properties>
typeAliases
意在降低冗余的全限定类名书写。
<!--在实体类比较少的时候 可以给实体类起别名-->
<typeAliases><typeAlias type="com.kuang.pojo.User" alias="User"/>
</typeAliases>
如果实体类十分多,也可以指定包起别名,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名,比如 domain.blog.Author
的别名为 author
;若有注解,则别名为其注解值。
<typeAliases><package name="com.kuang.pojo"/>
</typeAliases>
第一种可以DIY别名,第二种不行,如果非要改,需要在实体上增加注解。
映射器 mappers
注册绑定我们的Mapper文件;
第一种:
推荐使用resource
注册
<!--每一个Mapper.xml都需要在MyBatis核心配置文件中注册-->
<mappers><mapper resource="mapper/UserMapper.xml"/>
</mappers>
第二种:
使用class文件绑定注册
接口和他的Mapper配置文件必须同名
接口和他的Mapper配置文件必须在同一个包下
<!--每一个Mapper.xml都需要在MyBatis核心配置文件中注册-->
<mappers><mapper class="com.kuang.dao.UserMapper"/>
</mappers>
第三种:使用包扫描进行注入
<mappers><package name="com.kuang.dao"/>
</mappers>
resultMap
解决实体类中给的字段和数据库中的字段名不相符
例如:
实体类字段
数据库字段
则配置文件如下:
<resultMap id="getUserByIdMap" type="User"><result column="id" property="id"/><result column="name" property="name"/><result column="pwd" property="password"/></resultMap><select id="getUserById" parameterType="int" resultMap="getUserByIdMap">select *from mybatis.userwhere id = #{id}</select>
下一篇的地址
更多推荐
学习笔记(狂神MyBatis P1-P10)
发布评论