首先,导入jar包
junit一个,mysql一个,mybatis核心jar一个,mybatis依赖jar9个
然后是创建实体类,以及测试类
实体类User.jsva中
package com.hpe.po;
import java.util.Date;
public class User {
private int id;
private String username;
private Date birthday;
private String sex;
private String address;
public User() {
super();
}
public User(int id, String username, Date birthday, String sex, String address) {
super();
this.id = id;
this.username = username;
this.birthday = birthday;
this.sex = sex;
this.address = 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 + "]";
}
}
书写核心配置文件SqlMapConfig.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>
<typeAliases>
<!-- <typeAlias type="com.hpe.po.User" alias="user" /> 该方式是指定包下的User类别名是user,在使用类映射文件时候,说明参数或者返回类型时候,可以直接使用user -->
<!-- 批量指定别名 name指定包名,批量创建包下类的别名 ,即所有类的别名都创建, 默认是别名是包下的类名,首字母大小写均可。 -->
<package name="com.hpe.po" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<!-- 事务管理由jdbc管理 -->
</transactionManager>
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<!-- 数据库连接池 -->
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/mybatisclass?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="" />
<!-- 配置连接信息 -->
</dataSource>
</environment>
</environments>
<mappers>
<!-- mapper.xml文件的相对路径 ,这里是在src根目录下,如果是在com.po下,则加上com.po.UserMapper.xml -->
<mapper resource="UserMapper.xml" />
<!-- mybatis框架需要加载映射文件,将UserMapper.xml添加在SqlMapConfig.xml> -->
</mappers>
</configuration>
当然,这里把数据库配置也可以分离出去,写在db.properties文件中,那该核心被指文件需要修改,也需要引入properties文件。
properties文件内容:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatisclass?characterEncoding=utf-8
jdbc.username=root
jdbc.password=
driver:驱动名
url:数据库访问路径
username:登录数据库名
password:登录数据库密码
注意:properties文件中,等号后面的信息,都不带标点,最后他们是要拼接的拼接为:
jdbc:mysql://localhost:3306/mybatisclass?characterEncoding=utf-8&username=root&password=pwd
如此我们在修改SqlMapConfig.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="db.properties">
<!-- <property name="driver" value="com.mysql.jdbc.Driver"/> -->
<!-- 引入db.properties文件,注意路径问题,改文件我是放在src目录下 -->
</properties>
<typeAliases>
<!-- <typeAlias type="com.hpe.po.User" alias="user" /> -->
<!-- 批量指定别名 name指定包名,批量创建包下类的别名 别名是包下的类名,首字母大小写均可。 -->
<package name="com.hpe.po" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
</transactionManager>
<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>
<mappers>
<!-- mapper.xml文件的相对路径 -->
<mapper resource="UserMapper.xml" />
</mappers>
</configuration>
UserMapper.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">
<!--select语句 -->
<select id="selectUserById" parameterType="int" resultType="com.hpe.po.User">
select * from user where id=#{id}
<!-- 根据id查询用户 -->
<!-- id:标识sql语句,statemenid -->
<!--parameterType: 输入参数,输入映射类型 -->
<!-- resultType:映射输出结果类型 -->
<!-- #{id},给占位符赋值 ,如果parameterType是简单数据类型,{}中的内容任意
如果parameterType是对象数据类型,则{}中的值,对应对象的属性,不可随便写。
#{}方式与${}方式的区别:
#{}为占位符,${}是拼接方式
-->
</select>
<select id="selectUsernameByName" parameterType="String"
resultType="com.hpe.po.User">
select * from user where sex='girl' and username
like'%${value}%'
<!-- ${}使用拼接方式,相当like'%"+value+%' -->
</select>
<!-- insert语句 -->
<insert id="register" parameterType="com.hpe.po.User">
<!-- order:该句话执行顺序 resultType:执行结果映射类型 keyProperty:查询结果映射到输入参数的那个属性上。 -->
<!-- 如果在核心配置文件config文件中配置了别名<typeAliases>属性,则直接用别名就行,比如parameterType="user" -->
<selectKey order="AFTER" resultType="int" keyProperty="id">
select last_insert_id()<!-- 返回自增后的主键值,并放在keyProperty="id"的id中 -->
</selectKey>
insert into user(username, password, sex, realname)
values(#{username}, #{password}, #{sex}, #{realname})
<!-- insert语句 -->
</insert>
<!-- delete语句 -->
<delete id="delete" parameterType="int">
<!-- delete,update,insert都不用表明返回值类型,只要说明 parameterType传入类型即可-->
delete from user where id =
#{id}
</delete>
<!-- update语句 -->
<update id="updateBtId" parameterType="user">
update user set
username=#{username},sex=#{sex},realname=#{realname} where id=#{id}
</update>
</mapper>
在src下创建日志文件log4j.properties
# 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
书写测试类:
public class UserTest {
private SqlSessionFactory factory;
@Before
public void setUp() throws IOException{
InputStream inputStream=Resources.getResourceAsStream("SqlMapConfig.xml");
factory =new SqlSessionFactoryBuilder().build(inputStream);
}
//@Test是为单元测试添加注解,使用junit
@Test
public void testSelctUsrByNAme() throws IOException{
//读取配置文件
SqlSession session=factory.openSession();
//selectone查询单条
//statementid--》namespace+statementid
//
System.out.println();//syso
List<User> list=session.selectList("user.selectUsernameByName","三");
System.out.println(list);
//session.commit():在增删改时候提交事务,不然数据库不会更改
session.close();
}
}