主要内容以下: 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); } }