1
lhx2008 OP 突然发现用注入一个 sqlSessionFactory 用 openSession().getMapper()就可以了,但是不知道有没啥副作用
|
3
lhx2008 OP @aristotll 对呀,@Autowired 的 seesion 应该是 spring 管理的,自己弄一个不知道 Spring 会不会自动帮我关
|
4
lonenol 2018-01-03 23:13:42 +08:00
试试这个:
sqlSessionFactory.configuration.mapperRegistry.mappers |
5
lhx2008 OP @lonenol 这个好像返回的是 interface,不是 mybatis 动态代理之后的实体类
public Collection<Class<?>> getMappers() |
6
18583826786 2018-01-03 23:26:31 +08:00 via Android
额,不一直都是注入 sqlSessionFactoty,然后得到 mapper 吗? spring 有事务控制可以自己关闭 session,这里需要配置
|
7
x18960 2018-01-03 23:28:03 +08:00 via iPhone
只知道 jdk 的, 同楼主观望其他方法
|
8
zjp 2018-01-03 23:31:00 +08:00
Mapper 可以直接注入啊… mybatis 会动态代理。如楼上所说需要配置事务控制。简单场景用到反射可以肯定是用错了。
|
9
lhx2008 OP @zjp 问题是我现在不知道是那个 mapper,要运行的时候传参进来才能确定,所以在 mapper 上面自动注入是不行的
|
10
lhx2008 OP @18583826786 如果是正常用法就是直接注入到 xxxmaper 上面,不用 getmapper 啊
|
11
lhx2008 OP 我想是不是要重新自己写一个切面来自动关闭 session 会好一点?如果自己用 getMapper 函数的话。
|
13
zjp 2018-01-04 00:25:35 +08:00 via Android
@lhx2008 抱歉才看清楚题目描述…注入 sqlSessionFactoty 是需要手动关闭 session,生命周期已经脱离 Spring 管理
|
14
bxb100 2018-01-04 09:29:49 +08:00 via Android 1
有个抽象类叫做 sqlsessiondaosupport 其中有个方法可以获得 spring 管理的 sqlsession 然后你可以 getmapper
|
15
bxb100 2018-01-04 09:37:03 +08:00 via Android
或者直接用 sqlsessiontemplate 拿
|
17
Sypher 2018-01-04 11:44:28 +08:00
也就是说,楼主想要拿( Spring 管理下的) Mapper 去搞事情。#14 楼这种方法适合你
|
18
lonenol 2018-01-04 13:23:57 +08:00
@lonenol 这个好像返回的是 interface,不是 mybatis 动态代理之后的实体类
public Collection<Class<?>> getMappers() 然后再按类型获取一下 bean 应该就可以了吧 |
19
palmers 2018-01-04 13:31:54 +08:00 1
|
20
nita22 2018-01-04 20:31:02 +08:00 1
注入 sqlsessiontemplate,然后可以从 sqlsessiontemplate 里面 getMapper
|