mybatis连接数据库

来源:互联网 发布:胸卡设计软件 编辑:程序博客网 时间:2024/05/22 00:40

第一次学习使用mybatis,花了好几个小时解决了各种问题,主要是配置方面的问题,但是最后总算实现了数据库读表。

1、现在的绝大多数web应用,通常都以action、service、dao三层去组织代码,这样划分结构很清晰,分工明确

2、一般情况下,我们会把事务控制在service层。

3、action和dao层,会使用一些框架技术。比如action层可能选择有springmvc、struts等,dao层有hibernate、mybatis等选择,所以action的dao有可能遂根据情况变化,而service层关注业务逻辑,业务代码都是自己完成的,代码对自己是透明的。


整个项目分为 dao层,Model层,service层,xml文件,以及mybatis-config.xml文件。

dao层:

package user.dao;import java.util.List;import user.model.User;public interface userDAO {public List<User> query2();public void insertPredict(User u); }
model层:
package user.model;public class User {private Integer userid;private Integer sex;private Integer userlvcd;public Integer getUserid() {return userid;}public void setUserid(Integer userid) {this.userid = userid;}public Integer getSex() {return sex;}public void setSex(Integer sex) {this.sex = sex;}public Integer getUserlvcd() {return userlvcd;}public void setUserlvcd(Integer userlvcd) {this.userlvcd = userlvcd;}}

service层:

IBuySevice.java

package user.service;import java.util.List;import user.model.User;public interface IBuyService extends ITransactionService{public List<User> predict();}
ITransactionService.java;

package user.service;import org.apache.ibatis.session.SqlSession;/** * 带事务的server,配合TransactionProxyManager,TransactionInvaocationHandler使用 * */public interface ITransactionService {public void setSession(SqlSession session);public SqlSession getSession();}
TransactionInvocationHandler:

package user.service;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;/** * 事务调用handler * @author shenan4321 * */public class TransactionInvocationHandler implements InvocationHandler {    private ITransactionService proxy;      private SqlSessionFactory factory;              /**     * 构造函数     * @param object     * @param factory     */    TransactionInvocationHandler(ITransactionService object, SqlSessionFactory factory)      {          this.proxy = object;          this.factory = factory;      }                  @Override    public Object invoke(Object o, Method method, Object[] objects) throws Throwable      {      SqlSession session = factory.openSession();          Object result = null;          try          {          proxy.setSession(session);                    result = method.invoke(proxy, objects);                          session.commit();          } catch (Exception e)          {          e.printStackTrace();        session.rollback();          } finally          {          session.close();          proxy.setSession(null);        }          return result;      }  }
TransactionProxyManager:
package user.service;import java.io.Reader;import java.lang.reflect.Proxy;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 TransactionProxyManager {protected static SqlSessionFactory sqlSessionFactory;protected static Reader reader;    static {        try {            reader = Resources.getResourceAsReader("mybatis-config.xml");            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);        } catch (Exception e) {            e.printStackTrace();        }    }    /**     * 开启session     * @return     */    public static SqlSession openSession() {        return sqlSessionFactory.openSession();    }    /**     * 关闭session     * @param session     */    public static void closeSession(SqlSession session){    session.close();    }         /**     * 为服务层代理事务     * @param object     * @return     */    public static Object proxyFor(ITransactionService object)    {      ClassLoader classLoder = object.getClass().getClassLoader();    @SuppressWarnings("rawtypes")Class[] interfaces = object.getClass().getInterfaces();        return Proxy.newProxyInstance(classLoder, interfaces, new TransactionInvocationHandler(object, sqlSessionFactory));      } }
UserServiceImpl:

package user.service;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.ibatis.session.SqlSession;import user.dao.userDAO;import user.model.User;public class UserServiceImpl implements IBuyService{private SqlSession session;@Overridepublic SqlSession getSession() {return session;}@Overridepublic void setSession(SqlSession session) {this.session = session;}public List<User> predict(){List<User>  UserResult= getSession().getMapper(userDAO.class).query2();Map<Integer,Integer> userMap= new HashMap<Integer,Integer>();System.out.println("4月份(4/1~4/15)加购且下单的数量:"+UserResult.size());Integer userId,sex,userlvcd;for(User u : UserResult){userId= u.getUserid();sex= u.getSex();userlvcd=u.getUserlvcd();System.out.println(userId+" "+sex+" "+userlvcd);}return UserResult;}public static void main(String[] args){IBuyService serv= (IBuyService) TransactionProxyManager.proxyFor(new UserServiceImpl());List<User> user1= serv.predict();}}
xml文件(userMapper.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="user.dao.userDAO"><resultMap  type="User" id="UserResult"><result property="sex" column="sex" /><result property="userid" column="user_id" /><result property="userlvcd" column="user_lv_cd" /></resultMap>         <select id="query2" resultMap="UserResult" resultType="User">//resultMap=id的值         SELECT user_id,sex,user_lv_cd         FROM Jdata_user         WHERE user_id &it; 20         </select></mapper>
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><!--JD数据库配置--><typeAliases>          <typeAlias type="user.model.User" alias="User" />//alias的值要与上面的resulttype值相同        </typeAliases>      <environments default="development">        <environment id="development">        <transactionManager type="JDBC"/><dataSource type="POOLED">            <property name="driver" value="com.mysql.jdbc.Driver"/>                 <property name="url" value="jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8&useSSL=true"/>//易错            <property name="username" value="root"/>            <property name="password" value="1234"/>            </dataSource>        </environment>    </environments>      <!-- mybatis的mapper文件,每个xml配置文件对应一个接口 -->    <mappers>        <mapper resource="user/xml/userMapper.xml"/>    </mappers>      </configuration>




:


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 c驾驶证换证过期怎么办 驾驶证过了两年怎么办 驾驶证过期8个月怎么办 学驾照快过期了怎么办 朋友开我车撞了怎么办 b2驾照扣分没审怎么办 驾驶证脱审2个月怎么办 驾驶证脱审1月怎么办 驾照过期了没换怎么办 驾照过期1年多了怎么办 考驾照科目一考不过怎么办 我考驾照过期了怎么办 驾照过了审验期怎么办 驾照过期3年了怎么办 如果学车过期了怎么办 行驶证过期了3年怎么办 行驶证过期没审怎么办 行驶证过期两年怎么办 驾驶证过期7年了怎么办 换驾照过一个月怎么办? 行驶证正本掉了怎么办 车的行驶证丢了怎么办 三星s6 屏幕坏了怎么办 手机摔成黑屏了怎么办 三星屏幕漏液了怎么办 三星s8屏幕漏液怎么办 屏幕紫色漏液了怎么办 华为手机屏碎了怎么办 小米2s按键失灵怎么办 魅蓝屏幕摔花了怎么办 小米手机屏碎了怎么办 厦门医保卡坏了怎么办 医保卡丢了北京怎么办 重庆社保卡丢了怎么办 沈阳医保卡丢了怎么办 小孩医保卡丢了怎么办 少儿医保卡丢了怎么办 孩子医保卡丢了怎么办 医保卡存折丢了怎么办 济宁医保卡丢了怎么办 大连医保卡丢了怎么办