2、MyBatis快速入门
2.1、建立数据库,加入测试数据、
--创建表空间
create tablespace tb_jz
datafile 'C:\soft\oracle\jz.dbf'
size 100m;
--创建用户
create user jz IDENTIFIED by jz
default tablespace tb_jz;
--授权
grant connect,resource to jz;
grant unlimited tablespace to jz;
--单表操作
CREATE TABLE tb_user (
userid number(4) NOT NULL primary key,
user_name varchar2(100) unique not null,
pwd varchar2(100),
age number(3) ,
sex varchar(3),
birthday date
);
create sequence seq_user;
--插入测试数据
insert into tb_user(userid,user_name,pwd,age,sex,birthday)
values(seq_user.nextval,'张三','123456',10,'男',sysdate);
insert into tb_user(userid,user_name,pwd,age,sex,birthday)
values(seq_user.nextval,'李四','123456',10,'男',sysdate);
insert into tb_user(userid,user_name,pwd,age,sex,birthday)
values(seq_user.nextval,'王五','123456',10,'男',sysdate);
insert into tb_user(userid,user_name,pwd,age,sex,birthday)
values(seq_user.nextval,'赵六','123456',10,'男',sysdate);
select * from tb_user;
2.2、建立一个Maven项目
1、建立一个普通的maven项目
2、删除src目录,实际上就刚刚创建的项目当成一个父工程。
3、添加相关依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.luke</groupId>
<artifactId>mybatis_study</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<modules>
<module>mybatis_01</module>
</modules>
<dependencies>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.28</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.10.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
</project>
4、创建一个新的模块(mybatis_01)作为mybatis_study的子模块。
2.3、编写mybatis的核心配置文件
在src下面建立一个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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
<property name="username" value="jz"/>
<property name="password" value="jz"/>
</dataSource>
</environment>
</environments>
</configuration>
2.4、测试连接
package com.luke.test;
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 java.io.IOException;
import java.io.InputStream;
public class TestMybatis {
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
System.out.println("sqlSession:"+sqlSession);
System.out.println("connection:"+sqlSession.getConnection());
}
}
2.5、添加日志配置文件
resources目下建立log4j.properties资源文件
log4j.rootLogger=debug,stdout,logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=jbit.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout\t
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
2.6、建立实体类
package com.luke.pojo;
import java.io.Serializable;
import java.util.Date;
//注意:实现序列接口
public class User implements Serializable {
private int userid ;
private String userName;
private String pwd ;
private int age ;
private String sex ;
private Date birthday ;
public User() {
super();
}
public User(String userName, String pwd, int age, String sex, Date birthday) {
super();
this.userName = userName;
this.pwd = pwd;
this.age = age;
this.sex = sex;
this.birthday = birthday;
}
public User(int userid, String userName, String pwd, int age, String sex,
Date birthday) {
super();
this.userid = userid;
this.userName = userName;
this.pwd = pwd;
this.age = age;
this.sex = sex;
this.birthday = birthday;
}
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
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;
}
@Override
public String toString() {
return "User [userid=" + userid + ", userName=" + userName + ", pwd="
+ pwd + ", age=" + age + ", sex=" + sex + ", birthday="
+ birthday + "]";
}
}
2.7、建立mapper.xml文件
在resources目录中建立一个mapper.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">
<!--
namespace:命名空間 (保证唯一)
-->
<mapper namespace="com.luke.pojo.User">
<select id="selectUserById" resultType="com.luke.pojo.User">
select * from tb_user where userid = #{userid}
</select>
</mapper>
2.8、设置mapper.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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
<property name="username" value="jz"/>
<property name="password" value="jz"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper.xml"></mapper>
</mappers>
</configuration>
2.9、编写测试类
package com.luke.test;
import com.luke.pojo.User;
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 java.io.IOException;
import java.io.InputStream;
public class TestMybatis {
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
System.out.println("sqlSession:"+sqlSession);
System.out.println("connection:"+sqlSession.getConnection());
User user = sqlSession.selectOne("com.luke.pojo.User.selectUserById",2);
System.out.println(user);
}
}
2.10、查看日志文件
EBUG - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
sqlSession:org.apache.ibatis.session.defaults.DefaultSqlSession@131276c2
DEBUG - Opening JDBC Connection
DEBUG - Created connection 176955204.
DEBUG - Setting autocommit to false on JDBC Connection [oracle.jdbc.driver.T4CConnection@a8c1f44]
connection:oracle.jdbc.driver.T4CConnection@a8c1f44
DEBUG - ==> Preparing: select * from tb_user where userid = ?
DEBUG - ==> Parameters: 2(Integer)
DEBUG - <== Total: 1
User [userid=2, userName=null, pwd=123456, age=10, sex=男, birthday=Wed Apr 14 16:36:10 CST 2021]
此时发现有个问题:userName为空
这里先给出一种解决方案:采用别名,修改sql语句
<select id="selectUserById" resultType="cn.org.kingdom.pojo.User">
select userid,user_name as userName,age,pwd,sex,birthday from tb_user where userid = #{userid}
</select>