mybatis
来源:互联网 发布:明日之丈 知乎 编辑:程序博客网 时间:2024/05/22 21:07
spring-mybatis
mybatis的3.4.0及以上版本只支持mybatis-spring1.3.0及以上版本
出现Java.lang.NoClassDefFoundError: org/apache/ibatis/cursor/Cursor 错误!
说明是版本兼容问题,解决办法:mybatis的3.4.0及以上版本用mybatis-spring1.3.0及以上版本;mybatis的3.4.0以下版本用mybatis-spring1.3.0以下版本。
mybatis 独立使用
SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="environment"> <environment id="environment"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/wjh" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/user.xml" /> </mappers> </configuration>
user_mapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper namespace="mapper.UserMapper"> <select id="query" resultType="entity.User"> select * from wjh_user </select> <select id="getUser" parameterType="int" resultType="entity.User"> select * from user where user_id=#{id} </select> </mapper>>parameterType可不写mapper 接口: public interface UserMapper { public List<User> query(); public User getUser(int id); }
代码如下:
try{ String config = "SqlMapConfig.xml"; //class的根目录 Reader reader = Resources.getResourceAsReader(config); SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder(); SqlSessionFactory sf = sfb.build(reader); SqlSession session = sf.openSession(); //List<User> list = session.selectList("query"); UserMapper mapper = session.getMapper(UserMapper.class); List<User> list = mapper.query(); session.close(); return list; }catch (Exception e) { Logger logger = Logger.getLogger(this.getClass()); logger.warn("报错",e); } return null;
和spring的整合
spring-mvc.xml
<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <!-- 不注册jmx --> <constructor-arg type="boolean" value="false" /> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/wjh"/> <property name="user" value="root" /> <property name="password" value="root" /> </bean> <!-- mybatis --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="c3p0DataSource" /> <property name="mapperLocations" value="classpath:mapper/*.xml" /> <property name="configLocation" value="classpath:mybatis-config.xml" /> <!-- 别名包 --> <property name="typeAliasesPackage" value="cn.tarena.ht.pojo"/> </bean> <!-- 手动加载mapper <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="mapper.UserMapper"/> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean> --> <!-- 自动扫描注解的mapper --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="mapper"/> <property name="annotationClass" value="annotation.MyBatisRepository"/> </bean> <!-- 配置sqlSessionTemplate --> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache"> <constructor-arg index="0" ref="sqlSessionFactory" /> </bean>
补充:SqlSessionTemplate 类 销毁时会默认调用close(不管你是否设置了销毁方法为close),但是这个对象是代理对象,每执行的一个方法会获取一个SqlSession对象,执行完后关闭SqlSession对象,不需要close,调用close会报错,于是我们把销毁方法给转移到clearCache上
定义MyBatisRepository注解:
public @interface MyBatisRepository { String value() default ""; }
定义一个Mapper接口,给上一个自己定义的注解,MyBatis会自动扫描这个接口
@MyBatisRepository public interface UserMapper { public List<User> query(); public User getUser(int id); }
在mybatis-config.xml文件中
<configuration> <!--别名配置,可以省略包名 --> <typeAliases> <package name="entity"/> </typeAliases> </configuration>
typeAliases这个标签是配置别名的,可以用package这个属性,给所有的类默认加个包名,在mapper.xml文件中可以这样写:
<mapper namespace="mapper.UserMapper"> <select id="query" resultType="User"> select * from user </select> <select id="getUser" parameterType="int" resultType="User"> select * from user where user_id=#{id} </select> </mapper>
在dao中,代码如下:
@Resource private UserMapper userMapper; @Resource private SqlSessionTemplate sqlSessionTemplate; public List<User> query2() { return userMapper.query(); } public List<User> query3() { return sqlSessionTemplate.selectList("query"); } public User getUserById(int id){ return userMapper.getUser(id); } void updateState( @Param("deptIds") String[] deptIds, @Param("state") int state);
- 最好不要没有set函数,自己直接注入到属性中,这样会导致以后再配置文件上不能进行配置,配置文件依赖set函数,没有set函数是不标准的javaBean(可以不写set函数,汇通项目中没有set)
- @Param(“deptIds”),把属性值传递到xml文件中,不可以省略
阅读全文
0 0
- MyBatis
- MyBatis
- Mybatis
- myBatis
- mybatis
- MyBatis
- mybatis
- Mybatis
- MyBatis
- Mybatis
- mybatis
- MyBatis
- MyBatis
- mybatis
- MyBatis
- mybatis
- mybatis
- mybatis
- 【bzoj1566】【管道取珠】竟然是dp题(浅尝ACM-E)
- hdu 1050 Moving Tables(贪心)
- Android 生产者模式和消费者模式 --- 【应用场景】
- C++课堂笔记0706
- 数据结构面试题
- mybatis
- [LeetCode 解题报告]015. 3Sum
- 【剑指offer】构建乘积数组
- JAVA——常用函数收集
- BZOJ 3343 教主的魔法 暴力分块做法
- EA&UML日拱一卒-活动图::Signal,Event和Trigger
- TensorFlow ReLUs
- 多进程+协程
- mybatis和hibernate的区别