主要内容如下:
- myBatis在maven中的配置
- myBatis在工程中的config配置文件
- myBatis为Bean和表的映射文件
- myBatis基本的使用
- myBatis在maven中的配置,在pom.xml中增加内容
1. 增加依赖 , mybatis的,还有mysql的驱动的,servlet的, 以及junit的
1 <dependency> <!-- mybatis的依赖 --> 2 <groupId>org.mybatis</groupId> 3 <artifactId>mybatis</artifactId> 4 <version>3.2.8</version> 5 </dependency> 6 7 <dependency> <!-- mysql的驱动的依赖 --> 8 <groupId>mysql</groupId> 9 <artifactId>mysql-connector-java</artifactId> 10 <version>5.1.6</version> 11 </dependency> 12 13 <dependency> 14 <groupId>javax.servlet</groupId> 15 <artifactId>javax.servlet-api</artifactId> 16 <version>3.0.1</version> 17 <scope>provided</scope> <!-- 只在编译时和测试时运行的依赖 --> 18 </dependency> 19 20 <dependency> 21 <groupId>junit</groupId> 22 <artifactId>junit</artifactId> 23 <version>3.8.1</version> 24 <scope>test</scope> 25 </dependency>
2.增加插件
1 <plugin> 2 <groupId>org.mybatis.generator</groupId> 3 <artifactId>mybatis-generator-maven-plugin</artifactId> 4 <version>1.3.2</version> 5 <configuration> 6 <verbose>true</verbose> 7 <overwrite>true</overwrite> 8 </configuration> 9 </plugin>
- myBatis在工程中的config配置文件,在java代码的根目录下创建mybatis-config.xml
1. jdbc需要的配置文件:
1username=wxn 2password=wxn123 3url=jdbc:mysql://localhost:3306/simple_shop 4driver=com.mysql.jdbc.Driver
2. mybatis-config.xml的内容则如下:
1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 4 5 <!-- 1. 配置数据库的配置 --> 6<configuration> 7 <properties resource="jdbc.properties" /> 8 <typeAliases> <!-- 这一条配置必须在properties和settings配置之后 --> 9 <!--为bean的映射文件中的入参出参指定别名,则入参可以不用输入类的全名称了 --> 10 <typeAlias type="cn.feezu.wxn.domain.User" alias="User"/> 11 </typeAliases> 12 <environments default="development"> <!-- 环境可以配置多个,以便不同需要时可以任意切换 --> 13 <environment id="development"> 14 <!-- 事务管理 --> 15 <transactionManager type="JDBC"></transactionManager> 16 <dataSource type="POOLED"> 17 <property name="driver" value="${driver}"/> 18 <property name="url" value="${url}"/> 19 <property name="username" value="${username}"/> 20 <property name="password" value="${password}"/> 21 </dataSource> 22 </environment> 23 </environments> 24 <mappers> <!-- 指定映射文件的路径位置 --> 25 <mapper resource="cn/feezu/wxn/domain/User.xml"/> 26 </mappers> 27</configuration>
- myBatis为Bean和表的映射文件
1.假设已经创建了一个javabean 为User
1package cn.feezu.wxn.domain; 2 3import java.util.List; 4 5public class User { 6 private int id; 7 private String username; 8 private String password; 9 private String nickname; 10 private int type; 11 12 //不做一这一方的映射 13 private List<Address> addresses; 14 15 //setter 和 getter .......... 16}
2.而且已经存在一个数据库simple_shop, 以及表s_user,如下是sql语句
1drop database if exists simple_shop; 2create database simple_shop; 3grant all on simple_shop.* to 'wxn'@'localhost'; 4## 密码是wxn123 5use simple_shop; 6 7create table s_user( 8 id int(11) primary key auto_increment, 9 username varchar(100), 10 password varchar(100), 11 nickname varchar(100), 12 type int(5) 13); 14 15create table s_address( 16 id int(11) primary key auto_increment, 17 name varchar(255), 18 phone varchar(100), 19 postcode varchar(100), 20 reciver varchar(100), 21 user_id int(11), 22 constraint foreign key (user_id) references s_user(id) 23);
3. 在User.java的同目录中创建一个User.xml作为配置的映射文件
1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE mapper 3 PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 6<mapper namespace="cn.feezu.wxn.domain.User"> <!-- 这里指定namespace名同javabean --> 7<!--<mapper namespace="cn.feezu.wxn.mapper.UserMapper"> --><!-- 使用Mapper接口 --> 8 <!-- 这里的入参为User,使用的是config文件中指定的别名 --> 9 <insert id="add" parameterType="User"> 10 insert into s_user(username, 11 password, nickname, type) 12 value(#{username}, #{password}, #{nickname}, 13 #{type}); 14 </insert> 15 16 <update id="update" parameterType="User"> 17 update s_user set 18 password=#{password}, nickname=#{nickname}, 19 username=#{username}, 20 type=#{type} 21 </update> 22 23 <delete id="delete" parameterType="Integer"> 24 delete from s_user where 25 id=#{id}; 26 </delete> 27 <!-- 这里的出参为User,使用的是config文件中指定的别名 --> 28 <select id="select" parameterType="int" resultType="User"> 29 select * from 30 s_user where id=#{id}; 31 </select> 32</mapper>
- myBatis基本的使用
1. MyBatis使用SqlSession来控制事务,而SqlSession需要使用工厂模式创建,而SqlSession工厂的创建需要mybatis的配置文件作为资源来构建,抽取这个过程,得到一个MyBatisUtils的工具类.
1package cn.feezu.wxn.utils; 2 3import java.io.InputStream; 4import org.apache.ibatis.io.Resources; 5import org.apache.ibatis.session.SqlSession; 6import org.apache.ibatis.session.SqlSessionFactory; 7import org.apache.ibatis.session.SqlSessionFactoryBuilder; 8 9public class MyBatisUtil { 10 private static SqlSessionFactory factory; 11 static{ 12 try { 13 InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml"); 14 factory = new SqlSessionFactoryBuilder().build(resourceAsStream); 15 } catch (Exception e) { 16 e.printStackTrace(); 17 } 18 } 19 20 public static SqlSession openSession(){ 21 return factory.openSession(); 22 } 23 24 public static void closeSession(SqlSession session){ 25 if (session != null) { 26 session.close(); 27 } 28 } 29}
2. 那么创建测试方法来检验mybatis的配置是否生效
1 @Test 2 public void testUserAdd() { 3 SqlSession session = null; 4 try { 5 session = MyBatisUtil.openSession(); 6 // 调用mapper文件插入数据,调用之前需要将mapper文件配置到mybatis-config.xml文件中 7 User user = new User(); 8 user.setNickname("大刀王五"); 9 user.setPassword("123123"); 10 user.setUsername("wangwu"); 11 user.setType(1); 12 //注意insert方法第一个参数 13 //session.insert("cn.feezu.wxn.domain.User.add", user); 14 session.insert(User.class.getName() + ".add", user); 15 session.commit(); //提交事务 16 } catch (Exception e) { 17 e.printStackTrace(); 18 session.rollback(); // 事务提交失败,回滚 19 } finally { 20 MyBatisUtil.closeSession(session); //关闭session 21 } 22 }
3. 使用Mapper接口
1.对应User.xml中的增删改查,可以创建对应的Mapper接口,UserMapper.java,而不需要实现
1package cn.feezu.wxn.mapper; 2 3import cn.feezu.wxn.domain.User; 4 5/** 6 * 为User.xml增加接口方法 7 * @author wangxn 8 * 9 */ 10public interface UserMapper { 11 12 public void add(User user); 13 14 public void update(User user); 15 16 public void delete(Integer id); 17 18 public User select(int id); 19}
2. 创建了接口之后, 那么在javabean的映射文件中就可以替换mapper标签为中的namespace为Mapper接口了,其他配置不变
<mapper namespace="cn.feezu.wxn.mapper.UserMapper">
3. 在代码中使用时,就可以不直接使用session了,而是用Mapper来处理,好处是不用使用字符串传参防止出错了
1 @Test 2 public void testUserAdd(){ 3 SqlSession session = null; 4 try { 5 session = MyBatisUtil.openSession(); 6 7 User user = new User(); 8 user.setUsername("zhangfei"); 9 user.setNickname("zhangyide"); 10 user.setPassword("123123"); 11 user.setType(2); 12 13 session.getMapper(UserMapper.class).add(user); 14 15 session.commit(); 16 } catch (Exception e) { 17 e.printStackTrace(); 18 session.rollback(); 19 } finally { 20 MyBatisUtil.closeSession(session); 21 } 22 }