1. 程式人生 > >MyBatis入門詳解——附代碼

MyBatis入門詳解——附代碼

false face select bin mapper jdb override iba dex

我現在在學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入門詳解——附代碼