ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Mybatis笔记

2021-09-28 20:59:09  阅读:144  来源: 互联网

标签:xml img 转存 笔记 user Mybatis 外链 图片


Mybatis

是什么?

  • 持久层的框架

如何使用

  1. 在maven上导入相关jar包
<dependency>
   <groupId>org.mybatis</groupId>
   <artifactId>mybatis</artifactId>
   <version>3.5.2</version>
</dependency>
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.47</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.1</version>
    <scope>test</scope>
</dependency>
  1. 编写相关xml的核心配置文件(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>
   <environments default="development">
       <environment id="development">
           <transactionManager type="JDBC"/>
           <dataSource type="POOLED">
               <property name="driver" value="com.mysql.jdbc.Driver"/>
               <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>
               <property name="username" value="root"/>
               <property name="password" value="123456"/>
           </dataSource>
       </environment>
   </environments>
  
</configuration>
  1. 编写mybatis工具类
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 {

   private static SqlSessionFactory sqlSessionFactory;

   static {
       try {
           String resource = "mybatis-config.xml";
           InputStream inputStream = Resources.getResourceAsStream(resource);
           sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      } catch (IOException e) {
           e.printStackTrace();
      }
  }

   //获取SqlSession连接
   public static SqlSession getSession(){
       return sqlSessionFactory.openSession();
  }
}
  1. 在核心配置的mybatis-config.xml文件中注册DAO层的接口
 <mappers>
       <mapper resource="com/kuang/dao/userMapper.xml"/>
   </mappers>
  1. 编写实体类
  2. 编写DAO层的类的Mapper接口
public interface UserMapper {
   List<User> selectUser();
}
  1. 编写Mapper接口的配置文件
<?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.kuang.dao.UserMapper">
 <select id="selectUser" resultType="com.kuang.pojo.User">
  select * from user
 </select>
</mapper>
  1. 测试
public class MyTest {
   @Test
   public void selectUser() {
       SqlSession session = MybatisUtils.getSession();
       //方法一:
       //List<User> users = session.selectList("com.kuang.mapper.UserMapper.selectUser");
       //方法二:
       UserMapper mapper = session.getMapper(UserMapper.class);
       List<User> users = mapper.selectUser();

       for (User user: users){
           System.out.println(user);
      }
       session.close();
  }
}	

可能遇到的问题

  • Maven的静态资源过滤导致Mapper的xml文件无法生成为target文件

解决办法 :在pom.xml文件添加以下代码

<resources>
   <resource>
       <directory>src/main/java</directory>
       <includes>
           <include>**/*.properties</include>
           <include>**/*.xml</include>
       </includes>
       <filtering>false</filtering>
   </resource>
   <resource>
       <directory>src/main/resources</directory>
       <includes>
           <include>**/*.properties</include>
           <include>**/*.xml</include>
       </includes>
       <filtering>false</filtering>
   </resource>
</resources>

基础的CRUD操作(多练)

select操作

使用select标签,其中注意点就是关于参数的传递

参数的传递问题
方式一:通过注解进行传递
//通过密码和名字查询用户
User selectUserByNP(@Param("username") String username,@Param("pwd") String pwd);

/*
   <select id="selectUserByNP" resultType="com.kuang.pojo.User">
     select * from user where name = #{username} and pwd = #{pwd}
   </select>
*/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3ohhVqn7-1632833657545)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20210928204552593.png)]

方式二:通过map进行参数的传递

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r5TNylic-1632833657550)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20210928190603480.png)]

insert ,update,delete操作

注意事项:

  • 所有的增删改操作都需要提交事务!
  • 在标签中最好注明参数类型和返回值类型

配置文件

相关配置标签

configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
<!-- 注意元素节点的顺序!顺序不对会报错 -->
  1. environment元素
<environments default="development">
 <environment id="development">
   <transactionManager type="JDBC">
     <property name="..." value="..."/>
   </transactionManager>
   <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>

其中有两个重要的子节点元素

1.transactionManager(事务管理器)

2.dataSourse(数据库源)

作用:配置连接对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nlLQu3Se-1632833657553)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20210928192924757.png)]

  1. mapper元素

是什么? 就是映射器,映射接口文件

重点!!! 需要掌握四种引入方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nKW5TBxo-1632833657559)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20210928194135840.png)]

配置优化

1.使用properties元素导入相关连接信息

<configuration>
   <!--导入properties文件-->
   <properties resource="db.properties"/>

   <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>
   <mappers>
       <mapper resource="mapper/UserMapper.xml"/>
   </mappers>
</configuration>

2.使用别名来代替包的全路径

作用域和生命周期

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3lbIXqJf-1632833657560)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20210928202318571.png)]

主要理解三个的各自存在的周期

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-53q8QPm0-1632833657562)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20210928202402929.png)]

结果集映射ResultType

理解:顾名思义,就是将查询到的结果做一个新的映射,而不是使用原本的默认映射(HashMap)

目的是什么:能够解决从数据库查询到的数据列名和pojo的属性名不同的情况

分页功能

日志功能

动态SQl

tion>


2.使用别名来代替包的全路径



### 作用域和生命周期

[外链图片转存中...(img-3lbIXqJf-1632833657560)]

主要理解三个的各自存在的周期

[外链图片转存中...(img-53q8QPm0-1632833657562)]

### 





### 结果集映射ResultType

理解:顾名思义,就是将查询到的结果做一个新的映射,而不是使用原本的默认映射(HashMap)

目的是什么:能够解决从数据库查询到的数据列名和pojo的属性名不同的情况





### 分页功能



### 日志功能



### 动态SQl



### 缓存(了解)

标签:xml,img,转存,笔记,user,Mybatis,外链,图片
来源: https://blog.csdn.net/qq_45639009/article/details/120537406

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有