MyBATIS利用CRUD
副标题#e#
MyEclipse不提供自动生成,这里提供mybatis文件包和开拓文档 http://download.csdn.net/detail/u010026901/7489319
本身成立设置文件,
<?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="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@192.168.2.55:ORCL" /> <property name="username" value="ysk" /> <property name="password" value="123" /> </dataSource> </environment> </environments> <mappers> <!--这里填写dao接口映射的daoImpl,mybatis不是映射pojo(vo)类,而是dao类--> <mapper resource="com/kane/dao/NewsDAOImpl.xml" /> </mappers> </configuration>
本身设置链接的sqlsessionFactory类,相当于hibernate的sessionFactory对应一个数据库
package com.kane.dbc; import java.io.InputStream; 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 MyBATISSqlSessionFactory { // 设置文件的地址位置和名称 private static String CONFIG_FILE_LOCATION = "mybatis-conf.xml"; // 用来实现毗连池的,该类雷同Map荟萃。 private static final ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>(); // MyBATIS用来读取设置文件的类 private static InputStream is; // 用来成立毗连的,该类就是毗连池,利用单例设计模式 private static SqlSessionFactory sqlsessionFactory; // 备用的设置文件位置 private static String configFile = CONFIG_FILE_LOCATION; // 静态块,类加载时最先执行 static { try { // 加载设置文件到内存中 is = Resources.getResourceAsStream(configFile); // 成立毗连池以及内里的毗连 sqlsessionFactory = new SqlSessionFactoryBuilder().build(is); } catch (Exception e) { System.err.println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } private MyBATISSqlSessionFactory() { } /** * 取得数据库毗连工具 * * @return Session * @throws HibernateException */ public static SqlSession getSession() { // 先从ThreadLocal中取得毗连。 SqlSession session = (SqlSession) threadLocal.get(); // 假如手头没有毗连,则取得一个新的毗连 if (session == null) { session = sqlsessionFactory.openSession(); // 把取得出的毗连记录到ThreadLocal中,以便下次利用。 threadLocal.set(session); } return session; } /** * 毗连封锁的要领 * * @throws HibernateException */ public static void closeSession() { SqlSession session = (SqlSession) threadLocal.get(); // 将ThreadLocal清空,暗示当前线程已经没有毗连。 threadLocal.set(null); // 毗连放回到毗连池 if (session != null) { session.close(); } } }
#p#副标题#e#
通过设置文件实现daoimpl而不是java类
<?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.kane.dao.INewsDAO"> <insert id="doCreate" parameterType="News"> <!--jdbcType暗示这个内容答允为空,为Oracle指明范例
若表中的列名与vo中列名差异,可以重定名
SELECT id,title,content,pub_date AS pubDate,type_id AS typeId,photo,tname FROM news n,news_type nt WHERE id = #{id} AND n.type_id = nt.tid --> INSERT INTO NEWS(news_id,news_title,image_id,news_content,news_time) VALUES (sys_guid(),#{news_title},#{image_id},#{news_content,jdbcType=VARCHAR},#{news_time,jdbcType=DATE}) </insert> <delete id="doRemove" parameterType="java.lang.Integer"> DELETE FRON News WHEER news_id=#{id} </delete> <update id="doUpdate" parameterType="News"> UPDATE News SET news_title=#{news_title},image_id=#{image_id},news_content=#{news_content},news_time=#{news_time} WHERE news_id=#{news_id} </update> <select id="findAll" resultType="News"> SELECT news_id,news_title,image_id,news_content,news_time FROM News </select> <select id="findById" resultType="News"> SELECT news_id,news_title,image_id,news_content,news_time FROM News=#{id} </select> <select id="findAllSplit" resultType="News" parameterType="java.util.Map"> SELECT temp.* FROM (SELECT news_id,news_title,image_id,news_content,news_time,ROWNUM rn FROM News WHERE ${column} LIKE #{keyword} AND ROWNUM <=#{endNum}) temp WHERE temp.rn>#{startNum} </select> <select id="getAllCount" resultType="java.lang.Integer" parameterType="java.util.Map"> SELECT COUNT(*) FROM News WHERE ${column} LIKE #{keyword} </select> </mapper>
#p#分页标题#e#
接着service,在serviceImpl中
package com.kane.service.impl; import java.util.HashMap; import java.util.List; import java.util.Map; import com.kane.dao.INewsDAO; import com.kane.dbc.MyBATISSqlSessionFactory; import com.kane.service.INewsService; import com.kane.vo.News; public class NewsServiceImpl implements INewsService{ public List<News> findAll(){ List<News> all=null; try { all=MyBATISSqlSessionFactory.getSession().getMapper(INewsDAO.class).findAll(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ MyBATISSqlSessionFactory.closeSession(); } return all; } public void insert(News news) throws Exception { try { MyBATISSqlSessionFactory.getSession().getMapper(INewsDAO.class).doCreate(news); MyBATISSqlSessionFactory.getSession().commit(); } catch (Exception e) { MyBATISSqlSessionFactory.getSession().rollback(); e.printStackTrace(); } finally{ MyBATISSqlSessionFactory.closeSession(); } } public Map<String, Object> list(int pageNo, int pageSize, String column,String keyword){ Map<String,Object> map=new HashMap<String,Object>(); Map<String,Object> params=new HashMap<String, Object>(); params.put("column",column); params.put("keyword",keyword); params.put("endNum",pageSize*pageNo); params.put("startNum",(pageNo-1)*pageSize); try { map.put("allNews", MyBATISSqlSessionFactory.getSession().getMapper(INewsDAO.class) .findAllSplit(params)); map.put("count", MyBATISSqlSessionFactory.getSession().getMapper(INewsDAO.class) .getAllCount(params)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ MyBATISSqlSessionFactory.closeSession(); } return map; } public void remove(int id) throws Exception { // TODO Auto-generated method stub } public void update(News news) throws Exception { // TODO Auto-generated method stub } public News findById(int id){ News news=null; try { news=MyBATISSqlSessionFactory.getSession().getMapper(INewsDAO.class).findById(id); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ MyBATISSqlSessionFactory.closeSession(); } return news; } } 然后junit测试 @Test public void testList() throws Exception { System.out.println(ServiceFactory.getNewsServiceInstance().list(1, 5, "news_title", "12")); }
From:csdn博客 芳华张开