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入门详解——附代码的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud学习--- Zuul详解(附代码包)

SpringCloud学习--- Zuul详解(附代码包)

入门详解MyBatis入门基础详解

详解:MyBatis-Plus 代码生成器的使用

详解:MyBatis-Plus 代码生成器的使用

详解:MyBatis-Plus 代码生成器的使用