精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-02-08
最后修改:2012-02-08
近来打算开发一个技术框架,并应用此框架开发出一个论坛,开始打算用sturts2+spring+hibernate+jquery为基础,然后再进行封装,最后形成技术框架,但通过此网站获知mybatis比hibernate更灵活,实用。因此开始逐步接触mybatis。 以下是mybatis3.0的开发实例,使用的java环境jdk5.0,ide为eclipse3.7,数据库是oracle11g。 1.数据环境配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd"> <configuration> <!-- - - - - - - 数据库环境配置- - - - - - - - - --> <environments default="environments"> <environment id="eassen"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:eassen"/> <property name="username" value="eassen"/> <property name="password" value="oracle"/> </dataSource> </environment> </environments> <!-- - - - - - - -映射文件路径- - - - - - --> <mappers> <mapper resource="com/pojo/sql/DmMydwtMapper.xml"/> </mappers> </configuration> 2.数据库表映射(DM_MYDWT)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="com.dao.DmMydwtMapper"> <resultMap id="BaseResultMap" type="com.pojo.DmMydwt"> <id column="MYDWT_DM" property="mydwtDm" jdbcType="CHAR" javaType="String" /> <result column="MYDWT_MC" property="mydwtMc" jdbcType="VARCHAR" javaType="String" /> <result column="YXBZ" property="yxbz" jdbcType="CHAR" javaType="String" /> <result column="XYBZ" property="xybz" jdbcType="CHAR" javaType="String" /> </resultMap> <sql id="Base_Column_List"> MYDWT_DM, MYDWT_MC, YXBZ, XYBZ </sql> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String"> select <include refid="Base_Column_List" /> from EASSEN.DM_MYDWT where MYDWT_DM = #{mydwtDm,jdbcType=CHAR} </select> <delete id="deleteByPrimaryKey" parameterType="java.lang.String" flushCache="true"> delete from EASSEN.DM_MYDWT where MYDWT_DM = #{mydwtDm,jdbcType=CHAR} </delete> <insert id="insert" parameterType="com.pojo.DmMydwt" flushCache="true"> insert into EASSEN.DM_MYDWT (MYDWT_DM, MYDWT_MC, YXBZ, XYBZ) values (#{mydwtDm,jdbcType=CHAR}, #{mydwtMc,jdbcType=VARCHAR}, #{yxbz,jdbcType=CHAR}, #{xybz,jdbcType=CHAR}) </insert> <insert id="insertSelective" parameterType="com.pojo.DmMydwt" flushCache="true"> insert into EASSEN.DM_MYDWT <trim prefix="(" suffix=")" suffixOverrides=","> MYDWT_DM, MYDWT_MC, YXBZ, XYBZ, </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> #{mydwtDm,jdbcType=CHAR}, #{mydwtMc}, #{yxbz,jdbcType=CHAR}, #{xybz,jdbcType=CHAR}, </trim> </insert> <update id="updateByPrimaryKeySelective" parameterType="com.pojo.DmMydwt" flushCache="true"> update EASSEN.DM_MYDWT <set> <if test="mydwtMc != null"> MYDWT_MC = #{mydwtMc,jdbcType=VARCHAR}, </if> <if test="yxbz != null"> YXBZ = #{yxbz,jdbcType=CHAR}, </if> <if test="xybz != null"> XYBZ = #{xybz,jdbcType=CHAR}, </if> </set> where MYDWT_DM = #{mydwtDm,jdbcType=CHAR} </update> <update id="updateByPrimaryKey" parameterType="com.pojo.DmMydwt" flushCache="true"> update EASSEN.DM_MYDWT set MYDWT_MC = #{mydwtMc,jdbcType=VARCHAR}, YXBZ = #{yxbz,jdbcType=CHAR}, XYBZ = #{xybz,jdbcType=CHAR} where MYDWT_DM = #{mydwtDm,jdbcType=CHAR} </update> </mapper> 3.数据库表(DM_MYDWT)java
package com.pojo; import java.io.Serializable; public class DmMydwt implements Serializable { /** * */ private static final long serialVersionUID = 1078518054837885063L; /** * EASSEN.DM_MYDWT.MYDWT_DM * @ibatorgenerated 2012-02-05 20:14:30 */ private String mydwtDm; /** * EASSEN.DM_MYDWT.MYDWT_MC * @ibatorgenerated 2012-02-05 20:14:30 */ private String mydwtMc; /** * EASSEN.DM_MYDWT.YXBZ * @ibatorgenerated 2012-02-05 20:14:30 */ private String yxbz; /** * EASSEN.DM_MYDWT.XYBZ * @ibatorgenerated 2012-02-05 20:14:30 */ private String xybz; public String getMydwtDm() { return mydwtDm; } public void setMydwtDm(String mydwtDm) { this.mydwtDm = mydwtDm; } public String getMydwtMc() { return mydwtMc; } public void setMydwtMc(String mydwtMc) { this.mydwtMc = mydwtMc; } public String getYxbz() { return yxbz; } public void setYxbz(String yxbz) { this.yxbz = yxbz; } public String getXybz() { return xybz; } public void setXybz(String xybz) { this.xybz = xybz; } }
4.DAO
package com.dao; import com.pojo.DmMydwt; public interface DmMydwtMapper { /** * 根据主键删除 * 参数:主键 * 返回:删除个数 * @ibatorgenerated 2012-02-05 20:14:58 */ int deleteByPrimaryKey(String mydwtDm); /** * 插入,空属性也会插入 * 参数:pojo对象 * 返回:删除个数 * @ibatorgenerated 2012-02-05 20:14:58 */ int insert(DmMydwt record); /** * 插入,空属性不会插入 * 参数:pojo对象 * 返回:删除个数 * @ibatorgenerated 2012-02-05 20:14:58 */ int insertSelective(DmMydwt record); /** * 根据主键查询 * 参数:查询条件,主键值 * 返回:对象 * @ibatorgenerated 2012-02-05 20:14:58 */ DmMydwt selectByPrimaryKey(String mydwtDm); /** * 根据主键修改,空值条件不会修改成null * 参数:1.要修改成的值 * 返回:成功修改个数 * @ibatorgenerated 2012-02-05 20:14:58 */ int updateByPrimaryKeySelective(DmMydwt record); /** * 根据主键修改,空值条件会修改成null * 参数:1.要修改成的值 * 返回:成功修改个数 * @ibatorgenerated 2012-02-05 20:14:58 */ int updateByPrimaryKey(DmMydwt record); }
5.mybatis加载
package com.db; import java.io.IOException; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class ConnectionFactory { private static SqlSessionFactory factory; private static SqlSession sqlSession = null; // 读取MyBatis配置文件,创建SqlSessionFactory static { try { Reader reader = Resources.getResourceAsReader("sqlMapConfig.xml"); factory = new SqlSessionFactoryBuilder().build(reader, "eassen"); } catch (IOException e) { e.printStackTrace(); } } /** * 获取SqlSession * @return */ public static SqlSession getSession() { if(sqlSession == null){ sqlSession = factory.openSession(); } return sqlSession; } /** * 从配置文件中获取数据库表映射对象信息 * @param mapper * @return */ public static <T> T getMapper(Class<T> mapper) { SqlSession session = getSession(); return (T) session.getMapper(mapper); } /** * 数据提交 */ public static void commit(){ sqlSession.commit(); } /** * 数据回滚 */ public static void rollback(){ sqlSession.rollback(); } /** * 关闭sqlsession */ public static void close(){ if(sqlSession != null){ sqlSession.close(); } } } 6.数据查询,插入,更新,删除测试
package com.test; import com.dao.DmMydwtMapper; import com.db.ConnectionFactory; import com.pojo.DmMydwt; public class MydTest { public static void main(String[] args) { try { // 获取对象 DmMydwtMapper mydwtMapper = ConnectionFactory .getMapper(com.dao.DmMydwtMapper.class); // 查询相关MYDWT_DM为“1001”的信息 DmMydwt mydwt = mydwtMapper.selectByPrimaryKey("1001"); System.out.println("mybatis查询测试:================================="); System.out.println("MYDWT_DM:" + mydwt.getMydwtDm()); System.out.println("MYDWT_MC:" + mydwt.getMydwtMc()); // 插入数据 System.out.println("mybatis保存测试:================================="); mydwt = new DmMydwt(); mydwt.setMydwtDm("aaaa"); mydwt.setMydwtMc("mybatis保存"); mydwt.setYxbz("Y"); mydwt.setXybz("Y"); mydwtMapper.insert(mydwt); // 更新数据 System.out.println("mybatis更新测试:================================="); mydwt.setMydwtMc(new String("mybatis保存".getBytes(),"UTF-8")); mydwtMapper.updateByPrimaryKey(mydwt); // 删除数据 System.out.println("mybatis删除测试:================================="); mydwtMapper.deleteByPrimaryKey("1001"); ConnectionFactory.commit(); } catch (Exception e) { ConnectionFactory.rollback(); e.printStackTrace(); } finally { // 关闭sqlsession ConnectionFactory.close(); } } } 7.控制台信息输出
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-02-10
关于Mybatis3的更新操作,常见有以下两种:
第一种:
<update id="updateBySelected" parameterType="users"> update users <set> <if test="name!=null">user_name = #{name}</if> <if test="addr!=null">user_addr = #{addr}</if> </set> where user_id=#{id} </update>
第二种:
<update id="update" parameterType="users"> update users set user_name = #{name}, user_addr = #{addr} where user_id=#{id} </update>
个人认为有时候还是有需要将字段值设置为null的,比如清空日期字段。因此,针对只更新某一两个字段值的情况,我一般是这样操作的:
// 只更新用户姓名(前台页面只传入id、name) User user = userService.findById(id);//根据用户ID获取缓存的用户对象 user.setName(name);//更新用户姓名 userService.update(user);//同时更新User表所有字段值
不知道楼主是如何操作的(只更新某些字段)?
|
|
返回顶楼 | |
发表时间:2012-02-11
mybatis我都用了几年了。。。。
|
|
返回顶楼 | |
发表时间:2012-02-11
可以看一下mybatis和spring结合的新方法
http://sourceforge.net/projects/ibatisjpetstore/ |
|
返回顶楼 | |
发表时间:2012-02-13
最后修改:2012-02-13
[quote="duanzonglong"]可以看一下mybatis和spring结合的新方法 http://sourceforge.net/projects/ibatisjpetstore/[/quote]
恩,引入spring,就可以这么来了:
<!-- DAO层由 MapperScannerConfigurer自动生成mapper bean --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.sample.mapper" /> </bean> 直接由MapperScannerConfigurer.class扫描mapper接口生成对应的DAO。 |
|
返回顶楼 | |
发表时间:2012-02-13
没写分页啊,这些都没什么用。
|
|
返回顶楼 | |
发表时间:2012-02-13
tomleader 写道 没写分页啊,这些都没什么用。
分页网上蛮多吧 |
|
返回顶楼 | |
发表时间:2012-02-13
private static SqlSession sqlSession = null;
多线程环境不会出错? |
|
返回顶楼 | |
发表时间:2012-02-13
private static SqlSession sqlSession = null;
public static SqlSession getSession() { if(sqlSession == null){ sqlSession = factory.openSession(); } return sqlSession; } 高并发怎么处理? |
|
返回顶楼 | |
发表时间:2012-02-13
zjfcyefeng 写道
private static SqlSession sqlSession = null;
public static SqlSession getSession() { if(sqlSession == null){ sqlSession = factory.openSession(); } return sqlSession; } 高并发怎么处理?
/**session 模板类 * @author zhz * */ public static class SqlSessionTemplate { SqlSessionFactory sqlSessionFactory; public SqlSessionTemplate(SqlSessionFactory sqlSessionFactory) { this.sqlSessionFactory = sqlSessionFactory; } /**执行sql语句的方法 * @param action * @return */ public Object execute(SqlSessionCallback action) { SqlSession session = null; try { session = sqlSessionFactory.openSession(); //设置事务手动提交,如果省略,事务会自动提交,则spring配置文件声明式事务不生效 session.getConnection().setAutoCommit(false); // ============================================ Object result = action.doInSession(session); return result; } catch (SQLException e) { e.printStackTrace(); }finally { if(session != null) session.close(); } return null; } /**查询一条记录功能 * @param statement sql语句 * @param parameter 参数 * @return */ public Object selectOne(final String statement,final Object parameter) { return execute(new SqlSessionCallback() { public Object doInSession(SqlSession session) { return session.selectOne(statement, parameter); } }); } /**查询多条记录功能 * @param statement sql语句 * @param parameter 查询的对象 * @param offset list的起点 * @param limit 记录条数 * @return */ public List selectList(final String statement,final Object parameter,final int offset,final int limit) { return (List)execute(new SqlSessionCallback() { public Object doInSession(SqlSession session) { return session.selectList(statement, parameter, new RowBounds(offset,limit)); } }); } /**查询多条记录功能 * @param statement sql语句 * @param parameter 查询的对象 * @return */ public List selectList(final String statement,final Object parameter) { return (List)execute(new SqlSessionCallback() { public Object doInSession(SqlSession session) { return session.selectList(statement, parameter); } }); } /** 删除 * @param statement sql语句 * @param parameter 删除的对象 * @return */ public int delete(final String statement,final Object parameter) { return (Integer)execute(new SqlSessionCallback() { public Object doInSession(SqlSession session) { return session.delete(statement, parameter); } }); } /**更新 * @param statement 更新sql语句 * @param parameter * @return */ public int update(final String statement,final Object parameter) { return (Integer)execute(new SqlSessionCallback() { public Object doInSession(SqlSession session) { return session.update(statement, parameter); } }); } /**插入 * @param statement 插入sql语句 * @param parameter * @return */ public int insert(final String statement,final Object parameter) { return (Integer)execute(new SqlSessionCallback() { public Object doInSession(SqlSession session) { try { session.getConnection().setAutoCommit(false); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return session.insert(statement, parameter); } }); } } 其实spring也提供了sqlSessionTemplate类。mybatis没有ibatis的daoSupport支持了。。。 |
|
返回顶楼 | |