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 ⁢ 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
- mybatis动态连接数据库
- MyBatis连接SQLServer数据库
- MyBatis连接数据库
- mybatis连接数据库
- 使用Mybatis连接数据库
- mybatis连接数据库
- Mybatis 连接oracle数据库配置文件
- [笔记]Mybatis连接数据库操作
- Spring Boot MyBatis 连接数据库
- spring boot mybatis连接数据库
- Spring Boot MyBatis 连接数据库
- 使用MyBatis操作数据库连接
- mybatis连接数据库映射文件
- Intellij Mybatis连接Mysql数据库
- Spring Boot MyBatis 连接数据库
- 四、引入mybatis连接数据库
- Spring Boot MyBatis 连接数据库
- 关于mybatis连接数据库异常
- 如何搭建lamp(CentOS7+Apache+MySQL+PHP)环境
- QT:HTTP协议简单应用
- 记录前端学习的一些要点
- 字符串的空格更换(也可进行任意字符更换)
- 搭建codis
- mybatis连接数据库
- centos7使用yum安装mariaDB(开源MySQL)无法启动的解决办法
- Cache(缓存)和 Buffer(缓冲),主要区别是什么?
- Javascript中call的使用
- Windows下python+django环境搭建
- 非静态内部类Handler类引起内存泄露
- java.lang.ClassNotFoundException: org.openxmlformats.schemas.wordprocessingml.x2006.main.impl.CTPIm
- [最大流] 计划安排
- Qt Designer 5.6.2无法打开