Mybatis-02
Posted jzspace
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis-02相关的知识,希望对你有一定的参考价值。
一、
1、使用Map作为参数类型
当实体类或数据库表中的字段或参数过多时,如果要向表中插入添加或其他操作时使用实体类对象会比较繁琐,因为对象的参数太多。先理解这样一个设计方式,不正规但实用。
//向角色表中新增一个角色名--接口 int addUser2(Map<String,Object> map);
<!--Mapper.xml--> <insert id="addUser2" parameterType="map"> insert into smbms_role (id,roleName) values (#{roleId},#{roleName}) </insert>
//测试 @Test public void addUser2() { SqlSession sqlSession = MybatisUtils.getSqlSession(); UserDao mapper = sqlSession.getMapper(UserDao.class); Map<String, Object> map = new HashMap<String, Object>(); map.put("roleId",1); map.put("roleName","仓库管理"); mapper.addUser2(map); sqlSession.close(); }
Map传递参数,直接在sql中取出key即可。 parameterType = "map"
对象传递参数,直接在sql中取出对象属性即可。 parameterType = "Object"
只有一个基本类型参数的情况下,可以直接在sql中取到。不写参数类型也可以
多个参数用Map,或者注解。
注意:当前配置文件中 parameterType 参数类型是map sql语句中的参数要和map中的key对应
2、模糊查询怎么写
在Java代码执行的时候,传递通配符%%
List<User> user2 = mapper.getUser2("%li%");
在sql拼接中使用通配符 防止sql注入
select * from user where name like "%"#{name}"%"
3、环境配置
Mybatiis可以配置成适应多种环境
不过要记住:尽管可以配置多个环境,但每个sqlsessionFactory实例只能选择一种环境
Mybatis默认的事务管理器是JDBC,连接池:POOLED
还有一个事务管理器,现在已经不用了,但是面试问有几个事务管理器要知道有两个,另一个叫Managed
4、优化配置文件
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:8080/mybatis?serverTimezone=UTC&userSSL=true&useUnicode=true&characterEncoding=UTF-8 username=root password=123456
<!--如果外部文件包含所有配置那就这样直接引入就行了--> <properties resource="db.properties"/> <!--如果外部文件没有包含所有配置--> <properties resource="db.properties"> <property name="username" value="lcz"/> <property name="password" value="123456"/> </properties>
可以引入外部文件 用<properties>标签代表外部配置文件
可以在其中增加一些属性配置
如果两个配置文件中有同一个字段,优先使用外部配置文件的
5、类型别名
类型别名是为Java类型设置一个短的名字
存在的意义仅在于用来减少类完全限定名的冗余
两种起别名的方式:
1、指定类的全路径,设置一个别名
2、也可以指定一个报名,mybatis会在报名下面自动搜索需要的JavaBean,扫面实体类的包,他的默认别名就是这个类的类名,首字母小写。
<typeAliases> <typeAlias type="space.urbeautiful.pojo.User" alias="User"/> </typeAliases>
<typeAliases> <package name="space.urbeautiful.pojo"/> </typeAliases>
<select id="getUser" resultType="User"> select * from mybatis.user </select>
在实体类比较少的时候使用第一种方式
如果实体类十分多,建议使用第二种
第一种方式可以自定义别名,第二种只能是类的名称(小写大写都可以,但是官方建议使用小写),但是当实体类有注解的话,那么就在实体类上写注解名
@Alias("uuussseeerrr") public class User {}
6、映射器
MapperRegistry:注册绑定我们的Mapper文件
方式一:推荐使用这样注册mapper
<!--为每一个Mapper.xml都需要在Mybatis核心配置文件中注册--> <mappers> <mapper resource="space/urbeautiful/dao/UserMapper.xml"/> </mappers>
方式二:使用class文件绑定注册
<!--为每一个Mapper.xml都需要在Mybatis核心配置文件中注册--> <mappers> <mapper class="space.urbeautiful.dao.UserMapper"/> </mappers>
接口和他的Mapper配置文件必须同名
接口和他的Mapper配置文件必须在同一个包下,不然就会报错 未知注册
方式三:使用扫描包进行注入绑定
<!--为每一个Mapper.xml都需要在Mybatis核心配置文件中注册--> <mappers> <package name="space.urbeautiful.dao"/> </mappers>
注意点和方式二一样,都需要同名同包
二、声明周期和作用域
生命周期和作用域是至关重要的,因为错误的使用会导致非常严重的并发问题。
SqlSessionFactoryBuilder:
一旦创建了SqlSessionFactory就不需要它了。 作用域放在局部变量中。
SqlSeesionFactory:
说白了就是可以想象为:数据库连接池
SqlSeesionFactory一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。浪费资源
SqlSession:
连接到连接池的一个请求
SqlSessioon的实例不是线程安全的,因此不能被共享,所以他的最佳作用域是请求或方法的作用域。
用完之后需要赶紧关闭,否则资源被占用
三、resultMap
resultMap元素是Mybatis中最重要的元素
resultMap的设计思想是,对于简单的语句根本不需要配置显示的结果映射,而对于复杂一点的语句只需要描述他们的关系就行了
四、日志工厂
1、默认的日志工厂STDOUT_LOGGING
利用日志工厂后的控制台输出
以上是关于Mybatis-02的主要内容,如果未能解决你的问题,请参考以下文章
MyBatis-Plus02_条件构造器QueryWrapperUpdateWrapperconditionLambdaQuery
MyBatis-Plus02_条件构造器QueryWrapperUpdateWrapperconditionLambdaQuery