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> <packagename="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入門詳解——附代碼