MyBatis入门详解——附代码
Posted snks
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis入门详解——附代码相关的知识,希望对你有一定的参考价值。
我现在在学ssm框架,今天为大家分享一下MyBatis框架。
一, MyBatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
二,现在写一个简单的例子
1)先建立Javaweb工程,我的工程名叫:smbms_001
2.导入所学要的jar包到 WebContent包下WEB-INF下的lib文件夹中。
mybatis需要jar包:mybatis-3.2.2.jar
mysql驱动jar包:mysql-connector-java-3.2.13.-bin.jar
3,现在将bin包中的jar包运行到工程中
4.建需要的包
建的包名这里就不写了。
下面直接上代码
5.maybatis-confing.xml配置文件
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" > <configuration> <!--mabatis 与数据库连接 --> <!-- 引入database.properties --> <properties resource="database.properties"/> <!--配置mybatis的log 实现为LOG4J --> <settings> <setting name="logImpl" value="LOG4J"/> <!--设置resultMap的自动映射级别为NONE --> <!-- <setting name="autoMappingBehavior" value="NONE"/> --> <!--autoMappingBehavior:自动映射的行为 --> </settings> <!-- 别名 --> <typeAliases> <package name="cn.smbms.pojo"/> </typeAliases> <!-- 配置mybatis 的多套运行环境 --> <environments default="development"> <environment id="development"> <!-- 配置事务管理器 --> <transactionManager type="JDBC"></transactionManager> <!-- 配置dataSourse mybatis自带的数据源POOLED--> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${user}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 引入那些映射器 将mapper文件加入配置当中 --> <mappers> <mapper resource="cn/smbms/dao/user/UserMapper.xml"/> <!-- <mapper resource="cn/smbms/dao/user/ProviderMapper.xml"/> --> </mappers> </configuration>
这里详细讲解一下MyBatis的基础配置文件:
●<trpeAlias>元素定义了一个别名 cn.smbms.pojo, 定义以后MyBatis上下文中就可以使用别名去代替全限定名。
● <environment>元素的定义,这里描述的是数据库。它里面的<transactionManager>元素是配置事务管理器,这里采用的是MyBatis的JDBC管理器方式,
然后采用了<dataSource>元素配置数据库。
● <mapper>元素代表引入得那些映射器,(这个重要一定要记得引入,不引入会运行不了)
6.数据库(这里说明一下我用的是MySQL Workbench 实在不会把数据库导入上来,不好意思)
这里我就贴出连接数据的 database.properties类
driver=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/smbms?useUnicode=true&characterEncoding=UTF-8 user=root password=12345
7.创建对应的实体对象
对应代码
UserMapper.java
package cn.smbms.dao.user;
import java.util.Date;
//用户列表接口实现类
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import cn.smbms.pojo.User;
public interface UserMapper {
// 向数据库中插入数据
public int add(User user);
// 在增删改查中,实现多参数入参更新用户密码;
// public int update(@Param("id") Integer id, @Param("pwd") String userPassword);
public int update(@Param("userCode") String userCode, @Param("userName") String userName, @Param("id") Integer id);
// 用id查询,删除数据库中的数据;
public int delete(@Param("id") Integer id);
}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" > <mapper namespace="cn.smbms.dao.user.UserMapper"> <!-- 映射器 --> <!-- 查询用户表总条数 --> <select id="count" resultType="int"> select count(1) as count from smbms_user </select> <!-- 向smbms_user中插入数据 --> <insert id="add" parameterType="User"> insert into smbms_user(userCode,userName,userPassword) values(#{userCode},#{userName},#{userPassword}) </insert> <!-- 更新数据库 smbms_user中的用户名 --> <!-- <update id="update"> --> <!-- update smbms_user set userPassword=#{pwd} where --> <!-- id=#{id} --> <!-- </update> --> <!-- 根据用户的id 类跟新用户名称 prefix前缀,suffix后缀 --> <update id="update"> update smbms_user <trim prefix="set" suffixOverrides="," suffix="where id=#{id}"> <if test="userCode!=null and userCode!=‘‘"> userCode=#{userCode}, </if> <if test="userName!=null and userName!=‘‘"> userName=#{userName} </if> </trim> </update> <!-- 删除smbms_user,用id查询删除 --> <delete id="delete"> delete from smbms_user where id=#{id} </delete> </mapper>
8.写实现类UserMapperTest.java
代码
package cn.smbms.dao.user; import java.io.IOException; import java.io.InputStream; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.apache.log4j.Logger; import org.junit.Before; import org.junit.Test; import cn.smbms.pojo.User; import cn.smbms.utils.MyBatisUtil; public class UserMapperTest { private Logger logger = Logger.getLogger(UserMapperTest.class); @Before // 加注释 public void setUp() throws Exception { } //向数据库中插入数据 @Test public void testadd() { SqlSession sqlSession = null; int count = 0; try { sqlSession = MyBatisUtil.createSqlSession(); User user = new User(); user.setUserCode("001"); user.setUserName("张三"); user.setUserPassword("123451245566"); count = sqlSession.getMapper(UserMapper.class).add(user); sqlSession.commit(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); sqlSession.rollback(); } finally { MyBatisUtil.closeSqlSession(sqlSession); } logger.debug("UserMapperTest count--->" + count); } // 更新数据第一种方法 // public void testupdate() { // SqlSession sqlSession = null; // int count = 0; // try { // sqlSession = MyBatisUtil.createSqlSession(); // count = sqlSession.getMapper(UserMapper.class).update(22, "123"); // sqlSession.commit(); // } catch (Exception e) { // // TODO: handle exception // e.printStackTrace(); // sqlSession.rollback(); // } finally { // MyBatisUtil.closeSqlSession(sqlSession); // } // logger.debug("UserMapperTest count--->" + count); // } // 第二种方法 public void update() { SqlSession sqlSession = null; int count = 0; try { sqlSession = MyBatisUtil.createSqlSession(); count = sqlSession.getMapper(UserMapper.class).update(" liuweigang ", "刘伟刚", 1); sqlSession.commit(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); sqlSession.rollback(); } finally { MyBatisUtil.closeSqlSession(sqlSession); } logger.debug("UserMapperTest count--->" + count); } // 删除数据 public void delete() { SqlSession sqlSession = null; int count = 0; try { sqlSession = MyBatisUtil.createSqlSession(); count = sqlSession.getMapper(UserMapper.class).delete(22); sqlSession.commit(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); sqlSession.rollback(); } finally { MyBatisUtil.closeSqlSession(sqlSession); } logger.debug("UserMapperTest count--->" + count); } }
9.还有MyBatisUtil.java配置文件
package cn.smbms.utils; import java.io.IOException; 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 MyBatisUtil { private static SqlSessionFactory factory; static {// 静态状态下,factory只会创建一次 try { InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); factory = new SqlSessionFactoryBuilder().build(is); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession createSqlSession() { return factory.openSession(false);// false关闭自动提交 } public static void closeSqlSession(SqlSession sqlSession) { sqlSession.close(); } }
10.最后写一个log4j.properties
log4j.rootLogger=debug, stdout, R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p - %m%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=firestorm.log log4j.appender.R.MaxFileSize=100KB log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n log4j.logger.com.codefutures=DEBUGr.stdout.layout.ConversionPattern=%5p [%t] - %m%n
现在可以运行了。
这里就运行成功了。希望能帮到你。第一次写有不足之处还请大家指出,我会继续努力。
如果有要数据的,我会私下发的。
以上是关于MyBatis入门详解——附代码的主要内容,如果未能解决你的问题,请参考以下文章