Mybatis项目搭建

MyBatis是一个优秀的持久层框架。原生的jdbc操作存在大量的重复性代码(如注册驱动,创建连接,创建statement,结果集检测等)。框架的作用就是把这些繁琐的代码封装。

MyBatis通过XML或者注解的方式将要执行的sql语句配置起来,并通过java对象和sql语句映射成最终执行的sql语句。最终由MyBatis框架执行sql,并将结果映射成java对象并返回。

Mybatis项目实例可以根据Mybatis官网搭建:https://mybatis.org/mybatis-3/

开始搭建:

1、引入jar包依赖

     <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>

        <!-- mysql依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.35</version>
        </dependency>

2、引入mybatis的全局配置文件,该文件配置了mybatis的运行环境等信息

<?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">
<configuration>
	<!-- 引入外部的java配置文件(properties文件) -->
	<!-- property子标签执行顺序会早于 resource属性的解析 -->
	<properties resource="db.properties">
		<!-- <property name="db.username" value="123"/> -->
		<property name="username" value="123" />
	</properties>

	<!-- 自定义别名 -->
	<typeAliases>
		<!-- 批量别名设置,指定需要别名设置的po类的包名。默认别名就是类名(大小写都可以) -->
		<package name="com.zick.mybatis.po" />
		<!-- 单个别名设置 -->
		<!-- <typeAlias type="com.kkb.mybatis.po.User" alias="user"/> -->
	</typeAliases>
	<!-- 数据源连接,实际项目中会交给spring进行管理 -->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${db.driver}" />
				<property name="url" value="${db.url}" />
				<property name="username" value="${db.username}" />
				<!-- <property name="username" value="${username}" /> -->
				<property name="password" value="${db.password}" />
			</dataSource>
		</environment>
	</environments>
	<!-- 加载映射文件 -->
	<mappers>
		 <mapper resource="mapper/UserMapper.xml" />
	</mappers>
</configuration>

3、准备User sqlMapper文件、User实体对象

	<select id="findUserById" parameterType="java.lang.Integer" resultType="User" >
		SELECT * FROM user WHERE id = #{id}
	</select>

	<!-- 添加用户 -->
	<insert id="insertUser" useGeneratedKeys="true" keyProperty="id" parameterType="com.zick.mybatis.po.User">
		insert into user(username,birthday,sex,address)
		values(#{username},#{birthday},#{sex},#{address})
	</insert>

public class User implements Serializable {

	private int id;
	private String username;
	private Date birthday;
	private String sex;
	private String address;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public Date getBirthday() { return birthday; }
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", birthday=" + birthday + ", sex=" + sex + ", address="
				+ address + "]";
	}
}

4、编写测试用例

public class UserMapperTest {

    private SqlSessionFactory sqlSessionFactory;

    @Before
    public void init() throws Exception {
        // 指定全局配置文件路径
        String resource = "SqlMapConfig.xml";
        // 加载资源文件(全局配置文件和映射文件)
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 还有构建者模式,去创建SqlSessionFactory对象
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    @Test
    public void testFindUserById() throws Exception {
        // 构造UserMapper对象(sqlSession)
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 需要传的参数就是被代理的Mapper接口
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        // 调用UserMapper对象的findUserById
        User user = userMapper.findUserById(1);
        System.out.println(user);
    }

    @Test
    public void testInsert() throws Exception {
        // 构造UserMapper对象(sqlSession)
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 需要传的参数就是被代理的Mapper接口
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        User user = new User();
        user.setUsername("隔壁老詹12");
        user.setAddress("洛杉矶湖人");
        // 执行增删改操作,清空缓存
        userMapper.insertUser(user);
        System.out.println(user);
//        sqlSession.commit();
    }

特别的,Mybatis默认执行完insert语句并不会自动提交,需要手动或者设置自动提交。

建表语句如下:

CREATE TABLE `NewTable` (
`id`  int(11) NOT NULL AUTO_INCREMENT ,
`username`  varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名称' ,
`birthday`  date NULL DEFAULT NULL COMMENT '生日' ,
`sex`  char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别' ,
`address`  varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址' ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci

 本身搭建Mybatis项目Demo难度并不大,但接下来,更多的是以此为基点,开始对Mybatis的源码进行跟踪学习,并记录其中的点滴。

posted @ 2019-11-28 23:20  寻找的路上  阅读(218)  评论(0编辑  收藏  举报