大家好,又见面了,我是全栈君。
MyBatis中Like语句使用方式
like CONCAT(‘%’,#{name},’%’)
数据字段是char类型的,mybatis查询不出来,但是在pl/sql里能查,最好别用char,改成varchar。
java的byte,long,date不能与”判断。
Mybatis整合Spring
注意:为事务管理器配置的DataSource要和SqlSessionFactoryBean指向同一个,否则事务管理器就无法工作了。
1、Spring配置文件、数据源dynamicDataSource的配置过程略过、事务配置省略。
SqlSessionFactoryBean在Spring上下文创建共享的MyBatis SqlSessionFactory,可用于DataSourceTransactionManager或JtaTransactionManager可用于事务界定,使用JTA事务的或跨多个数据库,使用容器管理的事务(CMT)。
单独使用MyBatis时,SqlSessionFactory可以使用SqlSessionFactoryBuilder来创建。
而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来替代,把SqlSessionFactory交给Spring管理,最终也是SqlSessionFactoryBuilder来创建。
<bean id=“sqlSessionFactoryBean” class=“org.mybatis.spring.SqlSessionFactoryBean”>
<property name=“dataSource” ref=“dynamicDataSource” />
<!– mybatis配置 –>
<property name=“configLocation” value=“classpath:bean/mybatis.xml”/>
<property name=“typeAliasesPackage” value=“定义实体bean的包名,如com.your.bean“/>
<property name=“mapperLocations” value=“classpath:mapper/*.xml” />
<property name=“configurationProperties”>
<props>
<!– 启用自动映射,下划线格式到驼峰式 –>
<prop key=“mapUnderscoreToCamelCase”>true</prop>
</props>
</property>
</bean>
2、在com.your.dao包下生成Dao接口
public interface CommonDao {
void createBySelect(@Param(“backupTable”)String backupTable,@Param(“table”)String table);
}
配置:
<bean class=“org.mybatis.spring.mapper.MapperScannerConfigurer”>
<property name=“basePackage” value=“com.your.dao“ />
<!– 不加会不能引起property-placeholder属性注入问题 –>
<property name=“sqlSessionFactoryBeanName” value=“sqlSessionFactoryBean” />
</bean>
MapperScannerConfigurer:会查找类路径下的映射器并自动将它们创建成MapperFactoryBeans,之后自动装配SqlSessionFactory或SqlSessionTemplate
但是,如果你使用了一个以上的DataSource(因此,也是多个的SqlSessionFactory),那么自动装配可能会失效。这种情况下,你可以使用sqlSessionFactory或sqlSessionTemplate属性来设置正确的工厂/模板。MapperFactoryBean是一个工厂bean,在spring容器里,工厂bean是有特殊用途的,当spring将工厂bean注入到其他bean里时,它不是注入工厂bean本身而是调用bean的getObject方法。没有必要去指定SqlSessionFactory或SqlSessionTemplate,因为MapperScannerConfigurer将会创建MapperFactoryBean,之后自动装配。
id59/66皆指向org.apache.ibatis.binding.MapperProxy@378d0ff8
3、Mapper.xml配置
<!– namespace必须是Dao接口类全名称,id 必须是接口中的方法名称,这样动态代理 –>
<mapper namespace=“com.your.dao.CommonDao”>
<insert id=“save” parameterType=“TestBean”>
//说明:TestBean是在定义实体bean的包,如com.your.bean定义的类名
</insert>
<update id=“createBySelect” statementType=“STATEMENT”>
create table `${backupTable}` as select * from ${table} where id = -1
</update>
</mapper>
4、Service层调用
以上配置完毕后,直接调用dao接口即可。
——————————————————————————-
SqlSessionTemplate的使用
org.mybatis.spring.SqlSessionTemplate是线程安全的,可以在所有DAOs使用,可通过构造参数或依赖注入SqlSessionFactory实例,实现了SqlSession,是对MyBatis的SqlSession进行简易替换。通常用来替代默认的MyBatis实现的DefaultSqlSession,因为它不能参与到Spring的事务中也不能被注入,因为它是线程不安全的。相同应用程序中两个类之间的转换可能会引起数据一致性的问题。这个类负责管理MyBatis的SqlSession,调用MyBatis的SQL方法,翻译异常。
当调用SQL方法时,包含从映射器getMapper()方法返回的方法,SqlSessionTemplate将会保证使用的SqlSession是和当前Spring的事务相关的。此外,它管理session的生命周期,包含必要的关闭,提交或回滚操作。
1、声明bean
<bean id=“sqlSession” class=“org.mybatis.spring.SqlSessionTemplate”>
<constructor-arg index=“0”>
<ref bean=“sqlSessionFactoryBean” />
</constructor-arg>
</bean>
2、创建dao的类,注入sqlSession
@Autowired
private SqlSessionTemplate sqlSession;
3、使用
sqlSession.insert(“com.an.dao.TestDao.saveTest”, str)
转载于:https://blog.51cto.com/netpeak/1897227
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108661.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...