2021-11-11 Mybatis 2 map

总结

获取mybatis.xml 通过Resource 将其转化为流
通过SqlSessionFactoryBuilder().build(inputStream); 解析mybatis.XML文件
使得Configuration获得所有的配置信息
sqlSessionFactory实例化
transaction事务
创建executor执行器
创建sqlsession
实现CRUD

查看是否执行成功 失败就回滚 成功就提交 关闭
#{} 可以有效防止sql注入

万能的map

Map传递参数,直接在sql中取出即可。 parameterType=“map”
对象传递参数,直接在sql中取出对象的属性即可 parameterType=“Object”
只有一个基本类型参数的情况下,可以直接在sql中取到
多个参数用map,或者注解
usermapper

  int  addUser2(Map<String,Object> map);

mapper.xml

    <insert id="addUser2" parameterType="map">
        insert into mybatis.user(id,name,pwd) values (#{userid},#{username},#{userpwd});
    </insert>

测试

    @Test
    public void adduser2(){
        SqlSession sqlSession = null;
            //1.获取sqlsession对象
            sqlSession = MybatisUtils.getSqlSession();
            //2.执行sql
            //方式一: getMapper
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            Map<String, Object> map = new HashMap<>();
            map.put("userid",1);
            map.put("username","xiaoming");
            map.put("userpwd","123456");
            userMapper.addUser2(map);
            //3.关闭sqlsession
            sqlSession.close();
    }
}

模糊查询

传递通配符
List getUserLike(String value);

mapper.getUserLike(“%李%”);
select * from user where name like “%”#{value}“%”
select * from user where name like Concat(Concat("%",#{value,JDBCTYPE=VARCHAR}),"%")

核心配置文件

mybatis-config.xml
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:

configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)

environment(环境变量)

mybatis 默认的事务管理器就是JDBC 连接池 pooled

properties(属性)

这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
username=root
password=12345678

在核心文件中引入properties
注意 配置文件中标签存放有顺序

!--    引入外部配置文件-->
    <properties resource="db.properties">

    </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>
        <environment id="test">
            <transactionManager type=""></transactionManager>
            <dataSource type=""></dataSource>
        </environment>
    </environments>

可以引入外部文件
可以在其中增加一些属性配置
如果两个文件有同一个字段,优先使用外部配置文件

typeAliases(类型别名)

类型别名可为 Java 类型设置一个缩写名字。
它仅用于 XML 配置,意在降低冗余的全限定类名书写。

    <typeAliases>
     <!--    给实体类起别名--> 可以diy。适合实体类型少的
        <typeAlias type="pojo.User" alias="User"></typeAlias>
        <!--    指定一个包名,没有把提示会在包下面搜索需要的javabean  默认别名为这个类的别名-->
        不可以diy.    若有注解可以为注解的名字. 在实体类添加注解@Alias("user")
        <package name="com.zxw.pojo"/>
    </typeAliases>
   

基本类型的别名 前面加_ 下划线
包装类的别名 就是小写

settings(设置)

cacheEnabled 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 true | false true
lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 true | false
useGeneratedKeys 允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。 true | false False
mapUnderscoreToCamelCase 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。 true | false False
logImpl 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING 未设置

其他插件

typeHandlers(类型处理器)
objectFactory(对象工厂)

plugins(插件)

mybatis-plus
mybatis-generator-core
通用mapper

映射器 mappers

MapperRegister 注册绑定mapper文件
方式一:
使用相对路径的资源引用

<mappers>
        <mapper resource="com/zxw/dao/UserMapper.xml"></mapper>
    </mappers>

方式二:
使用映射器接口类 使用class文件

<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
</mappers>

注意点:接口和mapper配置文件必须同名 必须在同一个包下
方式三:

<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>

注意点:接口和mapper配置文件必须同名 必须在同一个包下

生命周期和作用域

在这里插入图片描述
作用域和生命周期类别是至关重要的,因为错误的使用会导致非常严重的并发问题。
SqlSessionFactoryBuilder
一旦创建了 SqlSessionFactory,就不再需要它了。局部变量
SqlSessionFactory
SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。
SqlSessionFactory 的最佳作用域是应用作用域。 有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式
SqlSession
连接池的一个请求
每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。
用完之后需要赶紧关闭,否则资源被占用

解决属性名和字段名不一致的问题

类型处理器
解决方法1: 起别名
select id,name,pwd as passwrod from user where id=1;
解决方法2:
resultMap

   <resultMap id="UserMap" type="com.zxw.pojo.User">
**<!--        column 数据库字段  property 实体类中的属性-->**
        <result column="pwd" property="password"></result>
    </resultMap>

日志

日志工厂
如果以恶搞数据库操作出现了异常,我们需要排错,日志就是最好的帮手
logImpl 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 SLF4J |
LOG4J | ···
LOG4J2 |
JDK_LOGGING |
COMMONS_LOGGING |
STDOUT_LOGGING | ···
NO_LOGGING
具体使用哪个日志实现 在设置中设定
STDOUT_LOGGING 标准日志输出
在mybatis核心配置文件中配置

<settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

LOG4J日志
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
先导入LOG4J依赖

<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
  <type>bundle</type>
</dependency>

配置 log4j.properties 配置文件

### 配置根 ###
log4j.rootLogger = debug,console ,fileAppender,dailyRollingFile,ROLLING_FILE,MAIL,DATABASE

### 设置输出sql的级别,其中logger后面的内容全部为jar包中所包含的包名 ###
log4j.logger.org.apache=dubug
log4j.logger.java.sql.Connection=dubug
log4j.logger.java.sql.Statement=dubug
log4j.logger.java.sql.PreparedStatement=dubug
log4j.logger.java.sql.ResultSet=dubug
### 配置输出到控制台 ###
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n

### 配置输出到文件 ###
log4j.appender.fileAppender = org.apache.log4j.FileAppender
log4j.appender.fileAppender.File = logs/log.log
log4j.appender.fileAppender.Append = true
log4j.appender.fileAppender.Threshold = DEBUG
log4j.appender.fileAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 配置输出到文件,并且每天都创建一个文件 ###
log4j.appender.dailyRollingFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyRollingFile.File = logs/log.log
log4j.appender.dailyRollingFile.Append = true
log4j.appender.dailyRollingFile.Threshold = DEBUG
log4j.appender.dailyRollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyRollingFile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n### 配置输出到文件,且大小到达指定尺寸的时候产生一个新的文件 ###log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender log4j.appender.ROLLING_FILE.Threshold=ERROR log4j.appender.ROLLING_FILE.File=rolling.log log4j.appender.ROLLING_FILE.Append=true log4j.appender.ROLLING_FILE.MaxFileSize=10KB log4j.appender.ROLLING_FILE.MaxBackupIndex=1 log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

### 配置输出到邮件 ###
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=chenyl@yeqiangwei.com
log4j.appender.MAIL.SMTPHost=mail.hollycrm.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=chenyl@yeqiangwei.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

### 配置输出到数据库 ###
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout

配置log4j为日志的实现

 <settings>
        <setting name="logImpl" value="LOG4J "/>
    </settings>

log4j的使用 测试使用
简单使用
导包
org.apache.log4j.Logger
日志对象
static Logger logger = Logger.getLogger(需要日志的类.class);
日志级别
info debug error

分页

limit 分页
select * from user limit startIndex,pageSize
mapper
paraeterType(map)
select * from user limit #{startIndex,}, #{pageSize}

RowBounds
java 分页
第三方插件
mybatis pagehelper

使用注解开发

适合简单sql开发
面向接口编程:解耦,可扩展
UserMapper
底层主要应用反射

 @Select("select * from user")
        List<User> getUserList();

将接口绑定注册在核心配置文件

<mappers>
          <mapper class="com.zxw.dao.UserMapper"></mapper>
    </mappers>

return sqlSessionFactory.openSession(true); 开启自动提交

   传递多个参数时 在每一个参数前添加@Param注解。基本类型和String类型 需要加上。引用类型不需要加  只有一个基本类型的话 可以忽略 建议加上 
        @Select("select * from user where id = #{id}")
        User getUserById(@Param("id")int id);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值