目录
1.入门程序
2.自增主键的返回
3.非自增主键的返回
4.总结
(1)需求:
(2)mybatis运行环境
如下截图所示:在resources文件夹下配置log4j.properties文件内容如下:
# Global logging configuration
# 在开发环境下日志级别要设置成DEBUG,生产环境设置成info或error
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)工程目录结构
(4)SqlMapConfig.xml
配置mybatis的运行环境,数据源,事物等
(4)创建po类,如上工程目录中的po包
package cn.itcast.mybatis.po;
import java.util.Date;
public class User {
private int id;
private String username;
private String sex;
private Date birthday;
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 String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
(5)配置映射文件
映射文件命名:User.xml(原本ibatis命名),mapper代理开发映射文件名称叫xxxMapper.xml,比如:UserMapper.xml,ItemsMapper.xml
在映射文件中配置sql语句:
SELECT LAST_INSERT_ID()
insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address});
delete from user where id=#{id};
update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id};
(6)编写测试类
package cn.itcast.mybatis.first;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
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;
import cn.itcast.mybatis.po.User;
public class MybatisFirst {
//根据id查询用户信息
@Test
public void findUserByIdTest() throws IOException {
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
// 通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 通过SqlSession操作数据库
// 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id
// 第二个参数:指定和映射文件中所匹配的parameterType类型的参数
// sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象
// selectOne查询出一条记录
User user = sqlSession.selectOne("test.findUserById",1);
System.out.println(user);
// 释放资源
sqlSession.close();
}
//根据用户名查找用户信息
@Test
public void findUserByNameTest() throws IOException{
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
// 通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//List中的User和映射文件中resultType所指定的类型一致
List list= sqlSession.selectList("test.findUserByName","小明");
System.out.println(list);
sqlSession.close();
}
//添加用户信息
@Test
public void insertUserTest() throws IOException{
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
// 通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//插入用户对象
User user=new User();
user.setUsername("王小军");
user.setBirthday(new Date());
user.setSex("1");
user.setAddress("河南郑州");
sqlSession.insert("test.insertUser",user);
//提交事物
sqlSession.commit();
//获取用户信息主键
System.out.println(user.getId());
//释放资源
sqlSession.close();
}
//删除用户信息
@Test
public void deleteUserTest() throws IOException{
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
// 通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.insert("test.deleteUser",28);
//提交事物
sqlSession.commit();
//释放资源
sqlSession.close();
}
//更新用户信息
@Test
public void updateUserTest() throws IOException{
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
// 通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//插入用户对象
User user=new User();
//必须设置id
user.setId(27);
user.setUsername("王大军");
user.setBirthday(new Date());
user.setSex("2");
user.setAddress("河南郑州");
sqlSession.insert("test.updateUser",user);
//提交事物
sqlSession.commit();
//释放资源
sqlSession.close();
}
}
mysql自增主键,执行insert提交之前自动生成一个自增主键,通过mysql函数获取到刚插入记录的自增主键:
LAST_INSERT_ID(),是insert之后调用此函数。
修改insertUser定义:
SELECT LAST_INSERT_ID()
insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address});
使用mysql的uuid()函数生成主键,需要修改表中id字段类型为string,长度设置成35位。
执行思路:
先通过uuid()查询到主键,将主键输入到sql语句中,执行uuid()语句顺序相对于insert语句之前执行。
SELECT uuid()
insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address});
(1)parameterType:在映射文件中通过parameterType指定输入 参数的类型
(2)resultType:在映射文件中通过resultType指定输出结果的类型
(3)#{},${}:
#{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap,如果接收简单类型,#{}中可以写成value或其它名称,#{}接收pojo对象值,通过OGNL 读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。
${}表示一个拼接符号,会引用sql注入,所以不建议使用${},${}接收输入参数,类型可以是简单类型,pojo、hashmap,如果接收简单类型,${}中只能写成value, ${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。
(4)selectOne和selectList
selectOne表示查询出一条记录进行映射。如果使用selectOne可以实现使用selectList也可以实现(list中只有一个对象)。
selectList表示查询出一个列表(多条记录)进行映射。如果使用selectList查询多条记录,不能使用selectOne。
如果使用selectOne报错:
org.apache.ibatis.exceptions.TooManyResultsException:Expected one result (or null) to be returned by selectOne(), but found: 4