DevOps
338
主要内容如下:
- myBatis在maven中的配置
- myBatis在工程中的config配置文件
- myBatis为Bean和表的映射文件
- myBatis基本的使用
- myBatis在maven中的配置,在pom.xml中增加内容
1. 增加依赖 , mybatis的,还有mysql的驱动的,servlet的, 以及junit的
<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.增加插件
<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>
- myBatis在工程中的config配置文件,在java代码的根目录下创建mybatis-config.xml
1. jdbc需要的配置文件:
username=wxn password=wxn123 url=jdbc:mysql://localhost:3306/simple_shop driver=com.mysql.jdbc.Driver
2. mybatis-config.xml的内容则如下:
<?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>
- myBatis为Bean和表的映射文件
1.假设已经创建了一个javabean 为User
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语句
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作为配置的映射文件
<?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>
- myBatis基本的使用
1. MyBatis使用SqlSession来控制事务,而SqlSession需要使用工厂模式创建,而SqlSession工厂的创建需要mybatis的配置文件作为资源来构建,抽取这个过程,得到一个MyBatisUtils的工具类.
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的配置是否生效
@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); } }