mybatis开发流程

整体流程的思路是这样子滴:

mybatis架构图是这样子滴:

实践出真理 -- 开干:

1.jar 包准备

1.1  log4j 是用来日志打印用的

1.2 mybatis-3.4.jar 是mybatis的jar 包

1.3 mysql 是jdbc 连接mysql 的jar 包

2.在Java Resource 目录下新建一个配置资源文件夹config

在config下创建log4j.propertites文件,代码如下:

其作用是因为mybatis默认使用log4j作为输出日志信息

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

 

3.在config下创建一个全局配置文件,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">
<configuration>
	<!-- 和spring整合后 environments配置将废除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理 -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
				value="jdbc:mysql://localhost:3306/dbxie?characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>

  <!-- 将我们写好的sql映射文件注册到全局配置文件中 -->
  <mappers>
    <mapper resource="cn/mybatis/bean/UserMapper.xml"/>
  </mappers>

</configuration>

4.创建一个 POJO类 user 类  为例:

public class User {
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

4.1数据库中创建与之相对应得表:user

 

5.在config目录下创建一个sqlmap目录,在sqlmap目录下新建一个usermapper.xml文件,里面编写操作user表的sql语句

<?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">
<!-- namespace:命名空间,用于隔离sql语句,后继有重要重要
	 #{}:点位符,相当于jdbc的?
	 ${}:字符串拼接指令,如果入参为普通数据类型{}内部只写value
-->
<mapper namespace="userMapper">
	<!-- id:sql id,语句的唯一标识
		 parameterType:入参的数据类型
		 resultType:返回结果的数据类型
	-->
	<select id="getUserById" parameterType="int" resultType="com.xie.pojo.User">
		SELECT
		  `id`,
		  `username`,
		  `birthday`,
		  `sex`,
		  `address`
		FROM `user`
		WHERE id = #{id}
	</select>
	
	<!-- resultType:如果返回结果为集合,只需设置为每一个的数据类型 -->
	<select id="getUserByUserName" parameterType="string" resultType="com.xie.pojio.User">
		select
			`id`,
			`username`,
			`birthday`,
			`sex`,
			`address`
		from `user`
		<!-- WHERE username LIKE #{name} -->
		where username like `%${value}%`
	</select>
	
	<!-- 插入用户 -->
	<!-- useGeneratedKeys:使用自增  keyProperty与之配套使用,这里是user的主键-->
	<insert id="insertUser" parameterType="com.xie.pojo.User" useGeneratedKeys="true" keyProperty="id">
		<!-- selectKey:主键返回
			 keyProperty:user中的主键属性
			 resultType:主键数据类型
			 order:指定selectKey何时执行:AFTER之后
		-->
		<!-- <selectKey keyProperty="id" resultType="int" order="AFTER">
			SELECT LAST_INSERT_ID()
		</selectKey> -->
		INSERT INTO `user`
		            (`username`,
		             `birthday`,
		             `sex`,
		             `address`)
		VALUES (#{username},
		        #{birthday},
		        #{sex},
		        #{address});
	</insert>
	
</mapper>

6.在SqlMapConfig.xml中加载sql映射文件userMapper.xml

7.测试程序:

新建测试类MyBatisTest 

package com.xie.dao;


import java.io.IOException;
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;
import org.junit.Test;

public class MyBatisTest {
    private SqlSessionFactory sqlSessionFactory =null;
    
    public void init() throws IOException {
        //1.创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder =new SqlSessionFactoryBuilder();
        //2.加载SqlSessionFactory对象
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        //3.创建SqlSessionFactory对象
        this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
    }
    
    @Test
    public void testQueryUserById() throws IOException {
        //1.创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder =new SqlSessionFactoryBuilder();
        //2.加载SqlSessionFactory对象
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        //3.创建SqlSessionFactory对象
        sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        //4.创建sqlsession对象
        SqlSession session = sqlSessionFactory.openSession();
        //5.执行sqlsession对象执行查询,获取结果user
        
        Object user = session.selectOne("userMapper.getUserById",1);
        System.out.println(user);
        session.close();
        
        
    }
}

测试结果:

 

8.优化程序,封装

 

package com.xie.util;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**
 * SqlSessionFactory工具类
 * 获取封装好的SqlSessionFactory对象
 * 返回一个SqlSessionFactory
 * */
public class SqlSessionFactoryUtil {

        private static SqlSessionFactory sqlSessionFactory;

        static {
                
                try {
                        // 创建SqlSessionFactoryBuilder对象
                        SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
                        // 创建核心配置文件的输入流
                        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
                        // 通过输入流创建SqlSessionFactory对象
                        sqlSessionFactory = ssfb.build(inputStream);
                } catch (IOException e) {
                        e.printStackTrace();
                }
                
        }

        /**
         * 获取SqlSessionFactory
         * @return
         */
        public static SqlSessionFactory getSqlSessionFactory() {
                return sqlSessionFactory;
        }
}

后面需要用到的时候就可以直接通过封装好的类去获取一个SqlSessionFactory对象了

猜你喜欢

转载自blog.csdn.net/qq_40612528/article/details/80762045
今日推荐