主要內容以下: java
1. 增長依賴 , mybatis的,還有mysql的驅動的,servlet的, 以及junit的mysql
<dependency> <!-- mybatis的依賴 --> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency>
<dependency> <!-- mysql的驅動的依賴 --> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency>
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> <!-- 只在編譯時和測試時運行的依賴 --> </dependency>
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency>
2.增長插件sql
<plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> </plugin>
1. jdbc須要的配置文件:數據庫
username=wxn password=wxn123 url=jdbc:mysql://localhost:3306/simple_shop driver=com.mysql.jdbc.Driver
2. mybatis-config.xml的內容則以下:apache
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!-- 1. 配置數據庫的配置 --> <configuration> <properties resource="jdbc.properties" /> <typeAliases> <!-- 這一條配置必須在properties和settings配置以後 --> <!--爲bean的映射文件中的入參出參指定別名,則入參能夠不用輸入類的全名稱了 --> <typeAlias type="cn.feezu.wxn.domain.User" alias="User"/> </typeAliases> <environments default="development"> <!-- 環境能夠配置多個,以便不一樣須要時能夠任意切換 --> <environment id="development"> <!-- 事務管理 --> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <!-- 指定映射文件的路徑位置 --> <mapper resource="cn/feezu/wxn/domain/User.xml"/> </mappers> </configuration>
1.假設已經建立了一個javabean 爲Userapi
package cn.feezu.wxn.domain; import java.util.List; public class User { private int id; private String username; private String password; private String nickname; private int type; //不作一這一方的映射 private List<Address> addresses; //setter 和 getter .......... }
2.並且已經存在一個數據庫simple_shop, 以及表s_user,以下是sql語句session
drop database if exists simple_shop; create database simple_shop; grant all on simple_shop.* to 'wxn'@'localhost'; ## 密碼是wxn123 use simple_shop; create table s_user( id int(11) primary key auto_increment, username varchar(100), password varchar(100), nickname varchar(100), type int(5) ); create table s_address( id int(11) primary key auto_increment, name varchar(255), phone varchar(100), postcode varchar(100), reciver varchar(100), user_id int(11), constraint foreign key (user_id) references s_user(id) );
3. 在User.java的同目錄中建立一個User.xml做爲配置的映射文件mybatis
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.feezu.wxn.domain.User"> <!-- 這裏指定namespace名同javabean --> <!--<mapper namespace="cn.feezu.wxn.mapper.UserMapper"> --><!-- 使用Mapper接口 --> <!-- 這裏的入參爲User,使用的是config文件中指定的別名 --> <insert id="add" parameterType="User"> insert into s_user(username, password, nickname, type) value(#{username}, #{password}, #{nickname}, #{type}); </insert> <update id="update" parameterType="User"> update s_user set password=#{password}, nickname=#{nickname}, username=#{username}, type=#{type} </update> <delete id="delete" parameterType="Integer"> delete from s_user where id=#{id}; </delete> <!-- 這裏的出參爲User,使用的是config文件中指定的別名 --> <select id="select" parameterType="int" resultType="User"> select * from s_user where id=#{id}; </select> </mapper>
1. MyBatis使用SqlSession來控制事務,而SqlSession須要使用工廠模式建立,而SqlSession工廠的建立須要mybatis的配置文件做爲資源來構建,抽取這個過程,獲得一個MyBatisUtils的工具類.app
package cn.feezu.wxn.utils; 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{ try { InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml"); factory = new SqlSessionFactoryBuilder().build(resourceAsStream); } catch (Exception e) { e.printStackTrace(); } } public static SqlSession openSession(){ return factory.openSession(); } public static void closeSession(SqlSession session){ if (session != null) { session.close(); } } }
2. 那麼建立測試方法來檢驗mybatis的配置是否生效dom
@Test public void testUserAdd() { SqlSession session = null; try { session = MyBatisUtil.openSession(); // 調用mapper文件插入數據,調用以前須要將mapper文件配置到mybatis-config.xml文件中 User user = new User(); user.setNickname("大刀王五"); user.setPassword("123123"); user.setUsername("wangwu"); user.setType(1); //注意insert方法第一個參數 //session.insert("cn.feezu.wxn.domain.User.add", user); session.insert(User.class.getName() + ".add", user); session.commit(); //提交事務 } catch (Exception e) { e.printStackTrace(); session.rollback(); // 事務提交失敗,回滾 } finally { MyBatisUtil.closeSession(session); //關閉session } }
3. 使用Mapper接口
1.對應User.xml中的增刪改查,能夠建立對應的Mapper接口,UserMapper.java,而不須要實現
package cn.feezu.wxn.mapper; import cn.feezu.wxn.domain.User; /** * 爲User.xml增長接口方法 * @author wangxn * */ public interface UserMapper { public void add(User user); public void update(User user); public void delete(Integer id); public User select(int id); }
2. 建立了接口以後, 那麼在javabean的映射文件中就能夠替換mapper標籤爲中的namespace爲Mapper接口了,其餘配置不變
<mapper namespace="cn.feezu.wxn.mapper.UserMapper">
3. 在代碼中使用時,就能夠不直接使用session了,而是用Mapper來處理,好處是不用使用字符串傳參防止出錯了
@Test public void testUserAdd(){ SqlSession session = null; try { session = MyBatisUtil.openSession(); User user = new User(); user.setUsername("zhangfei"); user.setNickname("zhangyide"); user.setPassword("123123"); user.setType(2); session.getMapper(UserMapper.class).add(user); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); } finally { MyBatisUtil.closeSession(session); } }