搭建一个简单的Mybatis项目

搭建一个简单的Mybatis项目

MyBatis的主要作用是减化持久层开发。

使用Java语言,可以通过JDBC实现数据库的增删改查相关功能的开发!在使用JDBC的过程中,始终是建立与数据库的连接 > 设计所需要执行的SQL语句 > 获取Statement/PreparedStatement对象 > 执行SQL语句 > 处理结果 > 释放资源/归还连接这样的处理模式,代码相对比较固定!

MyBatis框架可以简化以上开发过程,在使用MyBatis实现增删改查相关功能时,只需要:

  1. 设计所需要执行的功能的抽象方法
  2. 设计该抽象方法对应的SQL语句
  • 数据库准备

    USE test;
    
    CREATE TABLE t_user (
    	id INT AUTO_INCREMENT COMMENT '用户id',
    	username VARCHAR(16) NOT NULL UNIQUE COMMENT '用户名',
    	password VARCHAR(16) NOT NULL COMMENT '密码',
    	age INT COMMENT '年龄',
    	phone VARCHAR(20) COMMENT '手机号码',
    	email VARCHAR(30) COMMENT '电子邮箱',
    	PRIMARY KEY (id)
    ) DEFAULT CHARSET=utf8;
    

    插入数据

    INSERT INTO t_user (username, password, age, phone, email) VALUES 
    ('admin', '1234', 18, '13800138001', 'admin@qq.com'), 
    ('root', '1234', 19, '13800138002', 'root@qq.com'),
    ('liucs', '1234', 48, '13800138003', 'liucs@qq.com'), 
    ('zhangsan', '1234', 39, '13800138004', 'zhangsan@qq.com'), 
    ('lisi', '1234', 27, '13800138005', 'lisi@qq.com'), 
    ('wangwu', '1234', 25, '13800138006', 'wangwu@qq.com'), 
    ('zhaoliu', '1234', 33, '13800138017', 'zhaoliu@qq.com'), 
    ('xiaoming', '1234', 41, '1380013808', 'xiaoming@qq.com'), 
    ('xiaohong', '1234', 43, '1380013809', 'xiaohong@qq.com'), 
    ('lilei', '1234', 29, '13800138010', 'lilei@qq.com'), 
    ('hanmm', '1234', 36, '13800138011', 'hanmm@qq.com');
    
  • 创建maven项目,生成web.xml文件

  • 在pom.xml中添加对应依赖

    <!-- MyBatis -->
    <dependency>
    	<groupId>org.mybatis</groupId>
    	<artifactId>mybatis</artifactId>
    	<version>3.5.1</version>
    </dependency>
    
    <!-- MyBatis整合Spring -->
    <dependency>
    	<groupId>org.mybatis</groupId>
    	<artifactId>mybatis-spring</artifactId>
    	<version>2.0.1</version>
    </dependency>
    
    <!-- SpringJDBC -->
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-jdbc</artifactId>
    	<version>4.3.10.RELEASE</version>
    </dependency>
    
    <!-- mysql连接 -->
    <dependency>
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<version>8.0.16</version>
    </dependency>
    
    <!-- 数据库连接池 -->
    <dependency>
    	<groupId>commons-dbcp</groupId>
    	<artifactId>commons-dbcp</artifactId>
    	<version>1.4</version>
    </dependency>
    
    <!-- 单元测试 -->
    <dependency>
    	<groupId>junit</groupId>
    	<artifactId>junit</artifactId>
    	<version>4.12</version>
    </dependency>
    
  • 数据库连接:

    创建db.properties文件,用于配置数据库连接的相关信息,如下:

    url=jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    driver=com.mysql.jdbc.Driver
    username=root
    password=
    initialSize=2
    maxActive=10
    

    在配置driver属性时,需要注意所使用的mysql-connector-java的版本,如果使用的5.x版本,该属性值应该是com.mysql.jdbc.Driver,如果使用的是6.x或更高版本,该属性值应该是com.mysql.cj.jdbc.Driver

    如果使用的是6.x或以上版本的mysql-connector-java,在配置连接数据库的URL时,还必须显式的设置serverTimezone参数的值!在中国大陆地区可使用的值有Asia/ShanghaiAsia/Chongqing

  • 创建spring-dao.xml文件读取db.properties配置信息,如下:

    <util:properties id="config" location="classpath:db.properties"></util:properties>
    

    连接数据库时,使用到的数据源将是BasicDataSource,则需要将以上读取到的数据库连接信息注入到BasicDataSource的属性中去:

    <!-- 配置数据源,保证其能够连接数据库 -->
    <bean id="dataSource"
    	class="org.apache.commons.dbcp.BasicDataSource">
    	<property name="url" value="#{config.url}" />
    	<property name="driverClassName" value="#{config.driver}" />
    	<property name="username" value="#{config.username}" />
    	<property name="password" value="#{config.password}" />
    	<property name="initialSize" value="#{config.initialSize}" />
    	<property name="maxActive" value="#{config.maxActive}" />
    </bean>
    
  • 编写并执行测试类,检查是否配置成功

    public class Tests {
    	
    	ClassPathXmlApplicationContext ac;
    	
    	@Before
    	public void doBefore() {
    		ac = new ClassPathXmlApplicationContext(
    				"spring-dao.xml");
    	}
    	
    	@After
    	public void doAfter() {
    		ac.close();
    	}
    	
    	@Test
    	public void getConnection() throws SQLException {
    		BasicDataSource dataSource = ac.getBean("dataSource", BasicDataSource.class);
    		Connection conn = dataSource.getConnection();
    		System.out.println(conn);
    	}
    
    }
    
  • 接口和抽象方法

    使用MyBatis时,需要定义各功能对应的抽象方法,这些抽象方法必须定义在接口中!

    首先,应该创建UserMapper接口文件,然后,在接口中定义“插入用户数据”的抽象方法,关于抽象方法的设计原则:

    如果需要执行的是增、删、改类型的操作,则使用Integer(int)作为方法的返回值,将表示“受影响的行数”,可用于判断操作成功与否,还可以设计为void表示不关心受影响的行数;

    方法名称可以自定义,不可以重载;

    参数列表根据所需要的参数来决定

    插入用户数据需要执行的SQL语句大致是:

    insert into (username, password, age, phone, email) values (?,?,?,?,?)
    

    则抽象方法需要写5个参数,如果后续该数据表增加了更多的字段,则需要写更多参数,这种做法是有缺陷的,应该将这些参数封装到User类中:

    public class User {
    
    	private Integer id;
    	private String username;
    	private String password;
    	private Integer age;
    	private String phone;
    	private String email;
        
        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;
    	}
    	public Integer getAge() {
    		return age;
    	}
    	public void setAge(Integer age) {
    		this.age = age;
    	}
    	public String getPhone() {
    		return phone;
    	}
    	public void setPhone(String phone) {
    		this.phone = phone;
    	}
    	public String getEmail() {
    		return email;
    	}
    	public void setEmail(String email) {
    		this.email = email;
    	}
    
    }
    

    定义UserMapper接口

    public interface UserMapper {
        
    	Integer insert(User user);
    	
    	//后续根据需求添加其他抽象方法
    
    }
    

    需要配置“接口文件在哪里”,以保证后续MyBatis框架工作时,能找到该接口:

    <!-- 配置MapperScannerConfigurer -->
    	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    		<!-- 配置接口文件在哪里 -->
    		<property name="basePackage" value="mybatis"/>
    	</bean>
    
  • 配置SQL映射文件:

    src/main/resources下创建名为mappers的文件夹,将映射文件放入其中

    注意:在MyBatis中用于配置SQL语句的XML文件必须包括以下声明,否则将无法正常使用!

    <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
    

    在配置该XML文件时,首先,需要添加根节点<mapper>,且必须配置namespace属性

    <!-- namespace:对应哪个接口 -->
    <mapper namespace="mybatis.UserMapper">
    
    </mapper>
    

    根据所需要执行的SQL语句的种类,从<insert><delete><update><select>中选择子级节点,节点的id属性就是抽象方法的名称,然后,在节点内容编写需要执行的SQL语句,参数部分使用#{}格式的占位符,占位符内部的名称是方法的参数User类中的属性名:

    <!-- id:抽象方法的名称 -->
    <insert id="insert">
    	INSERT INTO t_user (
    		username, password, 
    		age, phone, 
    		email
    	) VALUES (
    		#{username}, #{password},
    		#{age}, #{phone},
    		#{email}
    	)
    </insert>
    
  • 需要配置“XML文件在哪里”,及框架执行时,“使用哪个数据源连接数据库”!需要在spring-dao.xml中添加配置:

    <!-- 配置SqlSessionFactoryBean -->
    	<bean class="org.mybatis.spring.SqlSessionFactoryBean">
    		<!-- 配置文件在哪 -->
    		<property name="mapperLocations" value="classpath:mappers/*.xml"/>
    		<!-- 配置使用哪个数据源连接数据库 -->
    		<property name="dataSource" ref="dataSource"/>
    	</bean>
    
  • 编写并执行单元测试:

    @Test
    public void insert() {
    	User user = new User();
    	user.setUsername("zhaoqi");
    	user.setPassword("888999");
    	user.setPhone("010-88888888");
    	Integer rows = userMapper.insert(user);
    	System.out.println("rows=" + rows);
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值