一、数据库准备
准备数据库数据
Localhost:3306
root
123qwe
创建表:
CREATE table t_person(
id int PRIMARY KEY auto_increment,
username varchar(20),
password varchar(20),
account decimal(10,2)
);
二、开发实战(非spring项目)
1. 下载包:
mybatis需要jar包:mybatis-3.4.1.jar
mysql驱动jar包:mysql-connector-java-5.1.38 .jar
mybatis/spring驱动包:mybatis-spring-1.3.0.jar
日志记录jar包:log4j.jar
上面需要的jar包都可直接在maven官网下载,如mysql驱动jar:
http://mvnrepository.com/artifact/mysql/mysql-connector-java
Maven项目则不需需下载。
2. 创建web项目
起名为:useMybatis
3. mysql驱动配置文件
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
jdbc.user=root
jdbc.password=123qwe
4. mybatis配置文件
创建mybatis.cfg.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>
<!-- 引入外部配置文件 -->
<properties resource="mysql.properties"></properties>
<!-- 配置mybatis运行环境 -->
<environments default="cybatis">
<environment id="cybatis">
<!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC" />
<!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
<!-- POOLED 表示支持JDBC数据源连接池 -->
<!-- UNPOOLED 表示不支持数据源连接池 -->
<!-- JNDI 表示支持外部数据源连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
</configuration>
5. 添加实体类
和t_person表对应的实体类:
package com.gary.model;
import java.io.Serializable;
public class PersonBean implements Serializable{
private static final long serialVersionUID = 1L;
private Integer id;
private String username;
private String password;
private Double account;
public PersonBean() {
super();
}
public PersonBean(String username, String password, Double account) {
super();
this.username = username;
this.password = password;
this.account = account;
}
public PersonBean(Integer id, String username, String password,
Double account) {
super();
this.id = id;
this.username = username;
this.password = password;
this.account = account;
}
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 Double getAccount() {
return account;
}
public void setAccount(Double account) {
this.account = account;
}
}
6. 创建接口文件和表映射文件
接口文件提供简单的增删改查数据信息
public interface PersonMapper {
/**
* 新增用戶
*/
public int insertPerson(PersonBean person) throws Exception;
/**
* 修改用戶
*/
public int updatePerson(PersonBean person, int id) throws Exception;
/**
* 刪除用戶
*/
public int deletePerson(int id) throws Exception;
/**
* 根据id查询用户信息
*/
public PersonBean selectPersonById(int id) throws Exception;
/**
* 查询所有的用户信息
*/
public List<PersonBean> selectAllPerson() throws Exception;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gary.papper.PersonMapper">
<!-- 自定义返回结果集 -->
<resultMap id="personMap" type="com.gary.model.PersonBean">
<id property="id" column="id" javaType="java.lang.Integer"></id>
<result property="username" column="username" javaType="java.lang.String"></result>
<result property="password" column="password" javaType="java.lang.String"></result>
<result property="account" column="account" javaType="java.lang.Double"></result>
</resultMap>
<!-- 在各种标签中的id属性必须和接口中的方法名相同 , id属性值必须是唯一的,不能够重复使用。parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型-->
<!-- useGeneratedKeys:( 仅 对 insert 有 用 ) 这 会 告 诉 MyBatis 使 用 JDBC 的getGeneratedKeys
方法来取出由数据(比如:像 MySQL 和 SQLServer 这样的数据库管理系统的自动递增字段)内部生成的主键。默认值: false。 -->
<!--keyProperty: (仅对 insert有用)标记一个属性, MyBatis 会通过 getGeneratedKeys或者通过 insert 语句的 selectKey 子元素设置它的值。默认:不设置。 -->
<!--#{}中的内容,为占位符,当参数为某个JavaBean时,表示放置该Bean对象的属性值 -->
<insert id="insertPerson" useGeneratedKeys="true" keyProperty="id">
insert into t_person (username,password,account) values (#{username},#{password},#{account})
</insert>
<update id="updatePerson" >
update t_person set username=#{username},password=#{password},account=#{account} where id=#{id}
</update>
<delete id="deletePerson" parameterType="int">
delete from t_person where id=#{id}
</delete>
<select id="selectPersonById" parameterType="int" resultMap="personMap">
select * from t_person where id=#{id}
</select>
<select id="selectAllPerson" resultMap="personMap">
select * from t_person
</select>
</mapper>
注:namespace="com.gary.papper.PersonMapper"
namespace为xml对应的接口名字,这样xml和接口类就一一对应起来了。
Id为接口中的方法名。
7. 在mybatis配置文件中注册映射文件
在mybatis.cfg.xml最后添加:
<mappers>
<!-- 告知映射文件方式1,一个一个的配置-->
<mapper resource="com/gary/mapper/PersonMapper.xml"/>
<!-- 告知映射文件方式2,自动扫描包内的Mapper接口与配置文件
<package name="com.gary.mapper"/> -->
</mappers>
使用方式2没有成功,不知道什么原因。
8. 创建工具类创建session
package com.gary.tools;
import java.io.Reader;
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 DBTools {
public static SqlSessionFactory sessionFactory;
static{
try {
//使用MyBatis提供的Resources类加载mybatis的配置文件
Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
//构建sqlSession的工厂
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
//创建能执行映射文件中sql的sqlSession
public static SqlSession getSession(){
return sessionFactory.openSession();
}
}
9. 创建dao
package com.gary.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.gary.mapper.PersonMapper;
import com.gary.model.PersonBean;
import com.gary.tools.DBTools;
public class PersonDao {
public static void main(String[] args){
insertPerson();
selectAllPerson();
}
/**
* 新增用户
*/
private static void insertPerson() {
SqlSession session = DBTools.getSession();
PersonMapper mapper = session.getMapper(PersonMapper.class);
PersonBean person = new PersonBean("张三", "1314520", 7000.0);
try {
mapper.insertPerson(person);
System.out.println(person.toString());
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
/**
* 删除用户
*/
private static void deletePerson(){
SqlSession session=DBTools.getSession();
PersonMapper mapper=session.getMapper(PersonMapper.class);
try {
mapper.deletePerson(1);
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
/**
* 根据id查询用户
*/
private static void selectPersonById(){
SqlSession session=DBTools.getSession();
PersonMapper mapper=session.getMapper(PersonMapper.class);
try {
PersonBean person= mapper.selectPersonById(2);
System.out.println(person.toString());
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
/**
* 查询所有的用户
*/
private static void selectAllPerson(){
SqlSession session=DBTools.getSession();
PersonMapper mapper=session.getMapper(PersonMapper.class);
try {
List<PersonBean> person=mapper.selectAllPerson();
System.out.println(person.toString());
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
}
通过dao的main方法测试通过。
回顾一下整个环节,最终创建的目录结构如下: