学习笔记(狂神MyBatis P1-P10)

编程入门 行业动态 更新时间:2024-10-21 11:43:06

<a href=https://www.elefans.com/category/jswz/34/1770117.html style=学习笔记(狂神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&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;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、业务代码

  1. 实体类
public class User {//实体类  字段名和数据库字段名相同private int id;  //idprivate String name;   //姓名private String pwd;   //密码//有参无参构造//get,set方法//toString
}
  1. mapper接口
import java.util.List;
import java.util.Map;public interface UserMapper {List<User> getUserList();}
  1. 接口配置文件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>
  1. 编写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)

本文发布于:2023-07-28 21:54:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1330296.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:学习笔记   狂神   MyBatis

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!