Mybatis

1.搭建Mybatis程序

1.1搭建环境

构建数据库环境

1.2.创建一个模块

  • 编写一个mybatis的核心配置文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configurationPUBLIC "-//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.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments>
    </configuration>
    
  • 编写mybatis工具类

    package com.xz.utils;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;//SqlSessionFactory
    public class MybatisUtils {private static SqlSessionFactory sqlSessionFactory;static {InputStream inputStream = null;try {//获取SqlSessionFactory对象String resource = "mybatis-config.xml";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();}
    }

1.3编写代码

  • 接口类
package com.xz.pojo;public class User {private int id;private String name;private String pwd;public User() {}public User(int id, String name, String pwd) {this.id = id;this.name = name;this.pwd = 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 String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", pwd='" + pwd + '\'' +'}';}
}
  • Dao接口
package com.xz.dao;import com.xz.pojo.User;import java.util.List;public interface UserDao {List<User> getUserList();
}
  • 接口实现类由原来的UserDaoImpl转变为Mapper配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.xz.dao.UserDao"><select id="getUserList" resultType="com.xz.pojo.User">select * from mybatis.user</select></mapper>

2.配置解析

1.核心配置文件

configuration(配置)

  • properties(属性)
  • settings(设置)
  • typeAliases(类型别名)
  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)
  • environments(环境配置)
    • environment(环境变量)

      • transactionManager(事务管理器)
      • dataSource(数据源)
  • databaseIdProvider(数据库厂商标识)
  • mappers(映射器)

2.环境配置(Environment)

MyBatis:可以配置成适应多种环境

但是,可以配置多个环境,SqlSessionFactory实例只能选择一种环境

Mybatis默认的事务管理器是JDBC , 连接池: POOLED

3.属性(Properties)

我们可以通过Properties属性来实现引用配置文件

这些属性都是可以外部配置且可动态替换的,既可以在典型的Java文件属性文件中配置,亦可通过Properties元素的子元素来传递【db.Properties】

在db.properties和内置标签中,外部文件优先级较高

3.*Mapper.xml

4.多对一

CREATE TABLE student(
id INT(10) NOT NULL PRIMARY KEY,
NAME VARCHAR(30) DEFAULT NULL,
tid INT(10) DEFAULT NULL,
KEY `fktid` (`tid`),
CONSTRAINT `fktid` FOREIGN KEY(`tid`) REFERENCES `teacher` (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

外键关联语句

 KEY `fktid` (`tid`),CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)

5一对多

6、Bean的自动装配

6.1ByName自动装配

通过set后面的name查询,寻找对应的beanid

6.2ByType自动装配

通过类型进行自动装配,但是具有全局唯一性

6.3使用注解自动装配

  1. 导入约束
  2. 配置注解的支持context:annotation-config/
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><context:annotation-config/></beans>

@Autowired

直接在属性上使用即可!也可以在set上使用

使用@Autowired我们可以不用编写set方法了,前提是你这个自动装配的属性在IOC(Spring)容器中存在,且符合名字byname!

小结:

@Resource和@Autowired的区别:

  • 都是用来自动装配的,都可以放在属性字段上
  • .Autowired通过byname的方式实现,而且必须要求这个对象存在!
  • @Resource默认通过byname的方式实现,如果找不到名字,则通过byType实现!如果两个都找不到的情况下,就报错![常用]
  • 执行顺序不同:@AutoWired 通过byType的方式实现,@Resource默认通过byname的方式实现,

7、使用注解开发

1、从属性注入

@component
public class user ipublic string name;//相当于<property name="name" value="kuangshen" />
@value("XZ")
public void setName(string name) {this.name = name;}
}

2.衍生的注解

@Component有几个衍生注解,我们在web开发中,会按照mvc三层架构分层!

  • dao 【@Repository]

  • service 【@service】

  • controller 【@controller】

    这四个注解功能都是一样的,都是代表将某个类注册到Spring中,装配Bean

3.自动装配

  • @Autowired :自动装配通过类型。名字
    如果Autowired不能唯一自动装配上属性,则需要通过@Qualifier(value=“xxx”)
  • @Nullable字段标记了这个注解,说明这个字段可以为null;
  • @Resource:自动装配通过名字。类型。

8.配置类开发

package com.xz.config;
import com.xz.pojo.user;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.componentscan;
import org.springframework.context.annotation.configuration;
import org.springframework.context.annotation . Import;//这个也会Spring容器托管,注册到容器中,因为他本来就是一个@component//Rconfiguration代表这是一个配置类,就和我们之前看的beans.xml
@configuration
@componentscan("com.xz.pojo")
@Import(xzconfig2.class)
public class xzfig {//注册一个bean ,就相当于我们之前写的一个bean标签/这个方法的名字,就相当于bean标签中的id属性//这个方法的返回值,就相当于bean标签中的c1ass属性
@Bean
public user user({return new user(;//就是返回要注入到bean的对象!}
}

事务

<! --配置声明式事务-->
<bean id= "transactionManager" class="org .springframework. jdbc.datasource.DataSourceTransactionManager">
<property name="datasource" ref="dataSource" / >
</bean>
<!--结合AOP实现事务的织入-->< ! --配置事务通知; --><tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--给那些方法配置事务-->
<!--配置事务的传播特性: newpropagation= --><tx:attributes><tx :method name="add" propagation="REQUIRED"/><tx :method name="delete" propagation="REQUIRED"/><tx :method name="update" propagation="REQUIRED" /><tx :method name="query" read-only="true" / ><tx :method name="*" propagation="REQUIRED"/></ tx:attributes>
</tx:advice>
<!--配置事务切入--><aop:config><aop:pointcut id="txPointCut" expression="execution(* com.kuang.mapper.*.*(..))"/><aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut" />
< / aop:config>

万能Map

int addUser2(Map<String,Object> map);
<insert id="addUser2" parameterType="map">insert into mybatis.user (id,pwd) values (#{userid},#{password});
</insert>
    @Testpublic void addUser2(){SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);Map<String, Object> map = new HashMap<>();map.put("userid",5);
//      map.put("username","AA");map.put("password","123456");mapper.addUser2(map);System.out.println(map);sqlSession.commit();sqlSession.close();}

Maven静态资源过滤问题

在pom.xml加入

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

Mybatis -study相关推荐

  1. 真正理解mybatis拦截器以及Interceptor和Plugin作用

    看了很多博客文章和,mybatis 的拦截器概念还是不能很好理解, 可能是因为自己基础不好或者理解方式和他人不同吧,所以决定自己花时间好好捋捋, 然后把理解后的总结记录下来,供他人参考,也许你们的理解 ...

  2. MyBatis复习笔记5:MyBatis代码生成器

    前言:做过几个项目之后深感代码生成器的便捷,有了它我们可以少写许多重复的.基础的代码,如基本的增删改查的代码,我们可以交给代码生成器生成,而我们只需要专注于业务逻辑上的代码即可. MyBatis Ge ...

  3. Mybatis入门:2(xml形式的增删改查)

    xml形式的增删改查 这里感觉没啥好讲的,照着代码自己敲一遍.认真再看看应该都懂的. Maven工程坐标 <?xml version="1.0" encoding=" ...

  4. Mybatis入门:1(Mybatis框架的环境搭建)

    Mybatis框架的环境搭建 一.创建maven工程并导入坐标 导入坐标: <dependencies><dependency><groupId>org.mybat ...

  5. MyBatis 一个简单配置搞定数据加密解密!

    欢迎关注方志朋的博客,回复"666"获面试宝典 前言:介绍一个简单的MyBatis加解密方式,日常学习工作中提及这种方法的比较少,所以拿来说说,如果已经知道这种方法的忽略本文! 一 ...

  6. SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例(转)...

    SpringBoot整合mybatis.shiro.redis实现基于数据库的细粒度动态权限管理系统实例 shiro 目录(?)[+] 前言 表结构 maven配置 配置Druid 配置mybatis ...

  7. springboot整合mybatis记录

    首先有个地方要说明一下,要使用到PageHelper插件分页的时候,springboot的版本不能是2.0.0,我试过使用2.0.0的版本,启动报错缺少类 org.springframework.bo ...

  8. 转:mybatis - 分页功能

    本文转自http://www.cnblogs.com/jcli/archive/2011/08/09/2132222.html mybatis高级应用系列一:分页功能 Mybatis3.0出来已有段时 ...

  9. Spring集成Mybatis,spring4.x整合Mybatis3.x

    Spring集成Mybatis,spring4.x整合Mybatis3.x ============================== 蕃薯耀 2018年3月14日 http://www.cnblo ...

最新文章

  1. 40+场面试,100%通过率,我想分享的 14 条经验
  2. Option Explicit 语句
  3. bootstrap 之下拉多选
  4. Phalanger---PHP的.NET编译器
  5. 5行代码解决——L1-042 日期格式化 (5分)
  6. TinyXML学习记录及整理
  7. 2017.9.6.语文
  8. 【数据库原理实验(openGauss)】金融场景化实验
  9. 技术人 | 为什么我们的系统会如此复杂?
  10. java api 第一个类是_java_8_第一个API
  11. 如何批量调节图片对比度?
  12. 1210_MISRA_C规范学习笔记_指针使用的规范性
  13. 关于银行卡四要素返回数据解析问题
  14. 程序员爱穿格子衫、秃头的刻板印象是如何形成的?
  15. 蓝桥杯Java组省赛备考经验分享
  16. Flink实战(八十五):flink-sql使用(十二)Flink 与 hive 结合使用(四)Hive Read Write
  17. 2020年区块链行业十大趋势
  18. java格式化mac地址,java格式化mac地址(加分隔符,去分隔符)
  19. java openCV调用摄像头并以窗体显示出来
  20. Elasticsearch:如何在 Elastic Agents 中配置 Beats 来采集定制日志

热门文章

  1. 准大学生必看!这10个建议,真希望计算机专业的学生早点知道
  2. 拒绝平庸——打造产品气质三步法
  3. 大神驾到 | 麒麟子带你初识Cocos Shader
  4. SaaS的矛盾与困境
  5. 2021鸿蒙开发者日亮点,华为开发者大会亮点提前看 华为鸿蒙2.0系统详细架构11日揭晓...
  6. Python3中的StringIO
  7. SAP-SD SIT增强版:POD多次确认
  8. nodejs升级方式
  9. nvue基础快速入门
  10. 难点三!!!Vue绑定class属性时无效