最近用mybatis开发,一些总结:
- 结合spring框架,需要在spring配置文件中加入sessionFactory定义:
<!-- 创建SqlSessionFactory,同时指定数据源 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatis-config.xml"/> <property name="dataSource" ref="dataSource" /> </bean>
- 定义mybatis-config.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> <typeAliases> <typeAlias alias="App" type="com.cyou.appserver.entity.App"/> <typeAlias alias="Feedback" type="com.cyou.appserver.entity.Feedback"/> <typeAlias alias="RecommendApp" type="com.cyou.appserver.entity.RecommendApp"/> <typeAlias alias="UpdateInfo" type="com.cyou.appserver.entity.UpdateInfo"/> <typeAlias alias="DeviceToken" type="com.cyou.appserver.entity.DeviceToken"/> <typeAlias alias="Cards" type="com.cyou.appserver.entity.Cards"/> <typeAlias alias="UnableVideoLog" type="com.cyou.appserver.entity.UnableVideoLog"/> <typeAlias alias="Battle" type="com.cyou.appserver.entity.Battle"/> <typeAlias alias="Card" type="com.cyou.appserver.entity.Card"/> <typeAlias alias="Occupational" type="com.cyou.appserver.entity.Occupational"/> <typeAlias alias="Licensing" type="com.cyou.appserver.entity.Licensing"/> <typeAlias alias="Pictures" type="com.cyou.appserver.entity.Pictures"/> <typeAlias alias="Timetable" type="com.cyou.appserver.entity.Timetable"/> <typeAlias alias="IndexImage" type="com.cyou.appserver.entity.IndexImage"/> <typeAlias alias="CardStat" type="com.cyou.appserver.entity.CardStat"/> <typeAlias alias="AppPush" type="com.cyou.appserver.entity.AppPush" /> <typeAlias alias="Formation" type="com.cyou.appserver.entity.Formation" /> <typeAlias alias="FormationParise" type="com.cyou.appserver.entity.FormationParise" /> <!-- <typeAlias alias="AppConfig" type="com.cyou.appserver.entity.AppConfig"/> <typeAlias alias="AppMenus" type="com.cyou.appserver.entity.AppMenus"/> <typeAlias alias="AppClick" type="com.cyou.appserver.entity.AppClick"/>--> </typeAliases> <mappers> <mapper resource="mybatis/Ad.xml" /> <mapper resource="mybatis/App.xml" /> <mapper resource="mybatis/Feedback.xml" /> <mapper resource="mybatis/RecommendApp.xml" /> <mapper resource="mybatis/UpdateInfo.xml" /> <mapper resource="mybatis/DeviceToken.xml" /> <mapper resource="mybatis/Cards.xml" /> <mapper resource="mybatis/UnableVideoLog.xml" /> <mapper resource="mybatis/Battle.xml" /> <mapper resource="mybatis/Card.xml" /> <mapper resource="mybatis/Occupational.xml" /> <mapper resource="mybatis/Licensing.xml" /> <mapper resource="mybatis/Pictures.xml" /> <mapper resource="mybatis/Timetable.xml" /> <mapper resource="mybatis/IndexImage.xml" /> <mapper resource="mybatis/CardStat.xml" /> <mapper resource="mybatis/AppPush.xml" /> <!-- <mapper resource="mybatis/AppConfig.xml" /> <mapper resource="mybatis/AppMenus.xml" /> <mapper resource="mybatis/AppClick.xml" /> --> <mapper resource="mybatis/Formation.xml" /> <mapper resource="mybatis/FormationParise.xml" /> </mappers> </configuration>
- 定义具体的域对象xml文件,比如Formation.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="Formation"> <select id="list" resultType="Formation" parameterType="map"> SELECT f.*,count(p.formationId) as praiseCount FROM formation f LEFT JOIN formation_parise p ON f.id = p.formationId WHERE f.appId=#{appId} <if test="level != null"> and f.level = #{level} </if> <if test="query2 != null"> and f.createTime > #{query2} </if> GROUP BY f.id <if test="query1 != null"> ORDER BY f.${query1} </if> LIMIT #{offset},#{limit} </select> <select id="countByParams" resultType="int" parameterType="map"> SELECT count(f.id) FROM formation f WHERE f.appId=#{appId} <if test="level != null"> and f.level = #{level} </if> <if test="query2 != null"> and f.createTime > #{query2} </if> </select> <select id="totalCount" resultType="int" parameterType="int"> select count(*) from formation where appId=#{id} </select> <insert id="insert" parameterType="Formation" keyProperty="id" useGeneratedKeys="true"> <!-- <selectKey keyProperty="id" resultType="int">select nextval('formation')</selectKey> --> insert into formation(appId, name, remark, imageUrl,createTime,contentUrl,commentCount,imei,level,deviceType) values (#{appId}, #{name}, #{remark}, #{imageUrl},#{createTime},#{contentUrl},#{commentCount},#{imei},#{level},#{deviceType}) </insert> <update id="update" parameterType="Formation"> update formation set <!-- appId=#{appId}, name=#{name}, remark=#{remark}, image=#{image}, --> topicId=#{topicId} where id=#{id} </update> <delete id="delete" parameterType="int"> delete from formation where id=#{id} </delete> <select id="findById" resultType="Formation" parameterType="int"> select f.*,count(p.id) as praiseCount from formation f,formation_parise p where p.id=#{id} and f.id = p.formationId </select> <update id="updateCommentCount" parameterType="int"> update formation set commentCount = commentCount + 1 where id=#{id} </update> <update id="updatePraiseCount" parameterType="map"> update formation set praiseCount = praiseCount+1 where id=#{id} </update> </mapper>
-
在java中调用:首先需要在bean中引用factory对象:
@Resource private SqlSessionTemplate sqlSessionTemplate;
- 然后使用名称调用
Map<String,Object> queryMap = new HashMap<String, Object>(); queryMap.put("appId", appId); queryMap.put("offset", (pageNum-1) * pageSize); queryMap.put("limit", pageSize); List<Formation> list = (List<Formation>) sqlSessionTemplate.selectList("Formation.list", queryMap);
- 需要注意的是,传递的参数在mybatis里可以使用#{变量名},标示带引号的,比如appId=#{appId},和${变量名},不带引号的,比如order by f.${query}.这一点要灵活运用。