mybatis一些简单的基本用法
来源:互联网 发布:js颜色r g b 编辑:程序博客网 时间:2024/06/04 17:59
一、jar包导入:
二、数据库:
数据库很简单,只有一张表tbl_user,三个字段,user_id为主键。
三、包的结构:
四、具体class及配置文件:
MybatisUtil.java
package cn.ibm.com.util;import java.io.Reader;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class MybatisUtil { private static final ThreadLocal<SqlSession> tl = new ThreadLocal<SqlSession>(); public static SqlSession getSqlSession() throws Exception { String resource = "cn/ibm/com/config/sqlMapConfig.xml"; Reader reader = Resources.getResourceAsReader(resource); return new SqlSessionFactoryBuilder().build(reader).openSession(); } public static SqlSession getSameSession() throws Exception{ SqlSession session = tl.get(); if(session==null){ session= getSqlSession(); tl.set(session); } return session; }}
UserDao.java
package cn.ibm.com.dao;import java.util.List;import cn.ibm.com.domain.User;public interface UserDao { int saveUser(User user); int saveUser02(User user); int deleteUserByUserId(String userId); int updateUser(User user); User findUserByUserId(String userId); List<User> findAllUser(); List<User> findUserByConditions(User user); List<User> findUserByIds(List<String> ids);}
UserDaoImpl.java
package cn.ibm.com.dao.impl;import java.util.List;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.ibatis.session.SqlSession;import cn.ibm.com.dao.UserDao;import cn.ibm.com.domain.User;import cn.ibm.com.util.MybatisUtil;public class UserDaoImpl implements UserDao{private static Log log = LogFactory.getLog(UserDaoImpl.class);private static SqlSession session;static{ try { session = MybatisUtil.getSameSession(); } catch (Exception e) { log.debug("获取session出错。。",e); }} @Override//如果保存成功则返回1,保存失败,且没有进行以下if的判断处理,则会抛出异常。使用parameterType public int saveUser(User user) { if(session.selectOne("cn.ibm.com.domain.User.selectUserByUserId", user.getUserId())!=null){ log.info(user.getUserId()+" : Id已经存在。请重新输入。"); return 0; } int ret = session.insert("cn.ibm.com.domain.User.insertUser", user); log.info("save user return : " +ret); session.commit(); return ret; } @Override//删除成功返回1,删除失败返回0,不会抛出异常 public int deleteUserByUserId(String userId) { int ret = session.delete("cn.ibm.com.domain.User.deleteUserByUserId", userId); log.info("delete user return : "+ret); session.commit(); return ret; } @Override//更新失败返回0,更新成功返回1 public int updateUser(User user) { int ret = session.update("cn.ibm.com.domain.User.updateUser", user); log.info("update user return : "+ret); session.commit(); return ret; } @Override// public User findUserByUserId(String userId) { User user = session.selectOne("cn.ibm.com.domain.User.selectUserByUserId", userId); log.info("find user return : "+user); return user; } @Override//查找所有用户 public List<User> findAllUser() { List<User> users = session.selectList("cn.ibm.com.domain.User.selectAllUser"); log.info("find all user return : "+users); log.info("users size : "+users.size()); return users; } @Override//使用parameterMap public int saveUser02(User user) { if(session.selectOne("cn.ibm.com.domain.User.selectUserByUserId", user.getUserId())!=null){ log.info(user.getUserId()+" : Id已经存在。请重新输入。"); return 0; } int ret = session.insert("cn.ibm.com.domain.User.insertUser02", user); log.info("save user return : " +ret); session.commit(); return ret; } @Override//多条件模糊查询 public List<User> findUserByConditions(User user) { List<User> users = session.selectList("cn.ibm.com.domain.User.selectUserByConditions", user); log.info("find by conditions return : "+users); log.info("users size : "+users.size()); return users; } @Override//根据多个id值进行查找 public List<User> findUserByIds(List<String> ids) { List<User> users = session.selectList("cn.ibm.com.domain.User.selectUsersByIds",ids); log.info("users size : "+users.size()); log.info("users : "+users); return users; }}
User.java
package cn.ibm.com.domain;public class User { private String userId; private String userName; private String userPwd; public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPwd() { return userPwd; } public void setUserPwd(String userPwd) { this.userPwd = userPwd; } @Override public String toString() { return "User [userId=" + userId + ", userName=" + userName + ", userPwd=" + userPwd + "]"; } }
mybatis核心配置文件sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <!-- 定义别名 --> <typeAliases> <typeAlias type="cn.ibm.com.domain.User" alias="User"/> </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/mybatisdb" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <!-- 注册SQL映射文件 --> <mappers> <mapper resource="cn/ibm/com/domain/UserMapper.xml" /> </mappers></configuration>
实体映射文件UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace为命名空间 ,要保证唯一--><mapper namespace="cn.ibm.com.domain.User"> <!-- 提取公共字段 --> <sql id="someCols"> user_name,user_pwd </sql> <sql id="allCols"> user_id,user_name,user_pwd </sql> <parameterMap type="User" id="userMap"> <parameter property="userId" resultMap="user_id"/> <parameter property="userName" resultMap="user_name"/> <parameter property="userPwd" resultMap="user_pwd"/> </parameterMap> <resultMap type="User" id="UserResult"> <result property="userId" column="user_id" javaType="String" jdbcType="VARCHAR"/> <result property="userName" column="user_name"/> <result property="userPwd" column="user_pwd"/> </resultMap> <!-- select标签中是查询语句 --> <!-- id:当前对应SQL的唯一标识 parameterType:当前SQL接收参数的类型 resultType:执行SQL后包装成什么类型返回 --> <select id="selectUserByUserId" parameterType="int" resultMap="UserResult"> select <include refid="allCols"/> from tbl_user where user_id = #{id} </select> <!-- 以下两种插入数据方式都可以正常运行 --> <insert id="insertUser" parameterType="User" > insert into tbl_user (<include refid="allCols"/>) values(#{userId},#{userName},#{userPwd}) </insert> <insert id="insertUser02" parameterMap="userMap" > insert into tbl_user (<include refid="allCols"/>) values(#{userId},#{userName},#{userPwd}) </insert> <delete id="deleteUserByUserId" parameterType="int" > delete from tbl_user where user_id = #{id} </delete> <update id="updateUser" parameterType="User" > update tbl_user <set> user_name=#{userName}, user_pwd = #{userPwd} </set> <where> user_id = #{userId} </where> <!-- 以上方式和下面的这种原始方式都可以实现update操作 --> <!-- update tbl_user set user_name=#{userName},user_pwd=#{userPwd} where user_id=#{userId} --> </update> <select id="selectAllUser" resultMap="UserResult" > select <include refid="allCols"/> from tbl_user </select> <!-- 多条件模糊查询,通过parameterType方式 --> <select id="selectUserByConditions" parameterType="User" resultMap="UserResult"> select <include refid="allCols"/> from tbl_user <where> <where> <if test="userName!=null"> user_name like concat('%',#{userName},'%') </if> <if test="userPwd!=null"> and user_pwd like concat('%',#{userPwd},'%') </if> </where> </where> </select> <!-- 根据多个id进行查询 --> <!-- 在这种情况下, parameterType="" 可以省略不写,其值也可以为list,List,java.util.List或者String,string,java.lang.String都是正确的,都可以输出结果 但是resultMap不能使用User,在本例中不可以使用,本例中User属性字段和数据库表字段是不一样的,不知道一样的话行不行,有待验证 foreach中item的属性值要和foreach内部大括号内的值相同,否则会发生异常 --> <select id="selectUsersByIds" parameterType="java.util.List" resultMap="UserResult"> select <include refid="allCols"/> from tbl_user <where> user_id in <foreach item="userId" collection="list" separator="," open="(" close=")" > #{userId} </foreach> </where> </select></mapper>
日志文件log4j.properties
log4j.rootLogger=debug,my### direct log messages to my ###log4j.appender.my=org.apache.log4j.ConsoleAppenderlog4j.appender.my.Target=System.outlog4j.appender.my.layout=org.apache.log4j.PatternLayoutlog4j.appender.my.layout.ConversionPattern=%d %5p %c{1}:%L - %m%n
测试类UserDaoTest.java
package test;import java.util.ArrayList;import java.util.List;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import cn.ibm.com.dao.UserDao;import cn.ibm.com.dao.impl.UserDaoImpl;import cn.ibm.com.domain.User;import cn.ibm.com.util.MybatisUtil;public class UserDaoTest { private static Log logger = LogFactory.getLog(UserDaoTest.class); private UserDao userDao = new UserDaoImpl(); @Test//test if get the same session public void testSameSession() throws Exception{ SqlSession s0 = MybatisUtil.getSameSession(); SqlSession s1 = MybatisUtil.getSameSession(); System.out.println(s0==s1); //true SqlSession s2 = MybatisUtil.getSqlSession(); SqlSession s3 = MybatisUtil.getSqlSession(); System.out.println(s2==s3); //false } @Test public void testSaveUser(){ User user = new User(); int random = (int) ((Math.random()+1)*1000); user.setUserId(random+""); user.setUserName("name "+random); user.setUserPwd("name "+random); userDao.saveUser(user); } @Test public void testSaveUser01(){ User user = new User(); user.setUserId(200000+""); user.setUserName("name "); user.setUserPwd("name "); userDao.saveUser(user); } @Test public void testDeleteUser(){ userDao.deleteUserByUserId("200000"); } @Test public void testFindUserById(){ userDao.findUserByUserId("200000"); } @Test public void testSaveUser_parameterMap(){ User user = new User(); user.setUserId(200001+""); user.setUserName("name1 "); user.setUserPwd("name1 "); userDao.saveUser02(user); } @Test public void testFindAllUser(){ userDao.findAllUser(); } @Test public void testUpdateUser(){ User user = new User(); user.setUserId("200001"); user.setUserName("updateName"); user.setUserPwd("updatePwd"); userDao.updateUser(user); } @Test public void testConditionsQuery(){ User user = new User(); user.setUserName("n"); user.setUserPwd("n"); userDao.findUserByConditions(user); } @Test public void testFindUserByIds(){ List<String> ids = new ArrayList<String>(); ids.add("58"); ids.add("1862"); userDao.findUserByIds(ids); }}
注意:有的时候可能会因为一些很小的细节出现问题,比如insert into tbl_user (<include refid="allCols"/>) values(#{userId},#{userName},#{userPwd}),这个sql语句,如果不小心将前面的括号写丢了,肯定时会发生异常的,如果参数类型是String或者其他的基本数据类型,当通过#进行取值的时候{}里面的值可以随便填写,但是如果是实体类对象,则
{}中的值必须是实体类的属性,如果不是则会发生异常。
0 0
- mybatis一些简单的基本用法
- MyBatis一些基本的概念
- mybatis的简单基本实现
- Log4的一些基本用法
- ListBox的一些基本用法
- Hibernate的一些基本用法
- hadoop的一些基本用法
- Git 的一些基本用法
- UITableView的一些基本用法
- UIButton的一些基本用法
- #define 的一些基本用法
- intent的一些基本用法
- Thread一些基本的用法
- UIWebView 的一些基本用法
- NSUserDefaults的一些基本用法
- Jquery的一些基本用法
- path的一些基本用法
- 广播的一些基本用法
- Tomcat启动时,webapps目录下的项目没有加载
- Android 获取应用流量信息
- 【原创】产品经理值得看的16个博客
- PictureEditEx
- Jquery提交包含特殊字符的表单数据
- mybatis一些简单的基本用法
- Java 内存区域和GC机制
- linux下安装XAMPP
- 数值分析学习(二)之Open Methods求根
- 基于jQuery的AJAX和JSON的实例
- Climbing Stairs
- Struts2(XWork)中的Container 一
- log4j学习
- 关于ie的兼容性trim