一.创建一个项目
二.加入jar包
点击完后点击右边的Add External JARs添加j2ee文件夹里面这个文件夹所有的包
再点击Add Library 添加JRE System Library库
弄完以后会有一个就算成功
第三步: log4j.properties
1.在src中nnew一个File把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
mybatis默认使用log4j作为输出日志信息。
第四步:SqlMapConfig.xml
在src中nnew一个File把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>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理-->
<transactionManager type="JDBC" />
<!-- 数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mysql?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
</configuration>
SqlMapConfig.xml是mybatis核心配置文件,上边文件的配置内容为数据源、事务管理。
五:po类
类规范:
类映射到类
Catalog映射到catalog表一对一
1.在src中new一个package,命名cn.qziedu.po
2.在cn.qziedu.po包中new一个class名为Catalog
3.在数据库中创建一个表catalog,然后表格里面的类型要跟Catalog里面的一致
4.Catalog里面的数据
package cn.qziedu.po;
/**
*
* @author 14643
*@desc
*私有属性和get set方法
*/
public class Catalog {
private Integer id;//编号
private String title;//分类名称
private String parent_id;//父编号
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getParent_id() {
return parent_id;
}
public void setParent_id(String parent_id) {
this.parent_id = parent_id;
}
@Override
public String toString() {
//第二个快捷方式创建
return "Catalog [id=" + id + ", title=" + title + ", parent_id=" + parent_id + "]";
}
}
打完以后按这个可以创建快捷方式
在按下面这个创建另外需要的代码
六.编写程序
1.在scr创建一个Folder名为sqlmap
2.在sqlmap文件夹中创建一个File名为Catalogs.xml;
先在Catalogs.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">
<mapper namespace="test">
</mapper>
在主语句中添加查找代码:
parameterType:定义输入到sql中的映射类型,#{id}表示使用preparedstatement设置占位符号并将输入变量id传到sql。
resultType:定义结果映射类型。
<!-- 查询catalog的id获取catalog信息 -->
<!-- 增删改查insert,delete.update,select -->
<!-- parameterType="int" 输入参数-->
<!--
resultType="cn.qziedu.po.Catalogs"输出参数
参数类型:cn.qziedu.po.Catalogs包名+类名
-->
<!-- 根据id获取用户信息 -->
<select id="findCatalogById" parameterType="int" resultType="cn.qziedu.po.Catalog">
select * from catalog where id=#{
id}
</select>
<!-- 自定义条件查询用户列表 -->
<select id="findCatalogsByIdTitle" parameterType="string" resultType="cn.qziedu.po.Catalog">
select * from catalog where title like '%${value}%'
</select>
3.1.6.7.1.2加载映射文件:
mybatis框架需要加载映射文件,
在SqlMapConfig.xml中添加:
<mappers>
<mapper resource="sqlmap/Catalogs.xml"/>
</mappers>
测试程序
new一个package名为cn.qziedu.test
在cn.qziedu.test中new一个JUnit Test Case名为TestCatalog,创建之前在下面的setUp()选项中打钩,然后改成以下这样,即可运行成功
package cn.qziedu;
import static org.junit.jupiter.api.Assertions.*;
import java.io.InputStream;
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.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import cn.qziedu.po.Catalog;
class TestCatalog {
//1.配置环境SqlMapConfig.xml+Catalogs.xml
//2.通过配置文件生成SqlSessionDactory
private SqlSessionFactory sqlSessionFactory;
@BeforeEach
void creatSqlSessionFactory() throws Exception {
// 配置文件
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// 使用SqlSessionFactoryBuilder从xml配置文件中创建SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
// 根据 id查询用户信息
@Test
void testFindCatalogById() {
SqlSession sqlsession=null;
try {
// 创建数据库会话实例sqlSession
sqlsession=sqlSessionFactory.openSession();
// 查询单个记录,根据用户id查询用户信息
Catalog catalog= sqlsession.selectOne("test.findCatalogById",2);
// 输出用户信息
System.out.println(catalog);
}catch(Exception e) {
e.printStackTrace();
}finally {
if (sqlsession != null) {
//关闭sqlsession
sqlsession.close();
}
}
}
}
这样就算查询成功
模糊查询
//模糊查询
void testFindCatalogByTitle() {
SqlSession sqlsession=null;
try {
sqlsession=sqlSessionFactory.openSession();
List<Catalog> catalog=sqlsession.selectList("test.findCatalogByTitle","X");
System.out.println(catalog.size());
}catch(Exception e) {
e.printStackTrace();
}finally {
if (sqlsession != null) {
//关闭sqlsession
sqlsession.close();
}
}
}
parameterType和resultType
parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。
resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。
查询所有:
在Catalog.xml中加
<select id="findAll" resultType="cn.qziedu.po.Catalog">
select * from catalog where 1=1
</select>
然后在TestCatalog.java测试这边加
@Test
//类名:首字母大写
//类方法名称:驼峰
void testfindAll() {
SqlSession sqlsession=null;
try {
sqlsession=sqlSessionFactory.openSession();
List<Catalog> catalog=sqlsession.selectList("test.findAll");
System.out.println(catalog.size());
}catch(Exception e) {
e.printStackTrace();
}finally {
if (sqlsession != null) {
//关闭sqlsession
sqlsession.close();
}
}
}
这两个是对应的
插入数据
1.先在Catalog.xml中添加
<!-- 简单类型是单个,比较简单,多个怎么处理 -->
<!-- 插入的SQL语句 -->
<insert id="insertCatalog" parameterType="cn.qziedu.po.Catalog">
<!-- 也可以不用写selectKey这个东西 -->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
select LAST_INSERT_ID()
</selectKey>
insert into catalog (title,parent_id)values (#{
title},#{
parent_id})
</insert>
2.然后在TestCatalog中添加
//插入
@Test
void testInsertCatalog() {
SqlSession sqlsession=null;
try {
// 数据库会话实例
sqlsession=sqlSessionFactory.openSession();
// 添加用户信息
Catalog catalog=new Catalog();
catalog.setTitle("xx");
catalog.setParent_id("0");
sqlsession.insert("test.insertCatalog",catalog);
//提交事务,要提交事务,没有提交的话没有执行,表格不会出现数据
//数组一致性,原子性,完整性
//插入、删除、跟新有问题,他会rollback回滚回来之前的模样
//insert的第一个参数是映射文件的namespace+id=test.insertCatalog
Integer i=sqlsession.insert("test.insertCatalog",catalog);
sqlsession.commit();//凡是增删改都要加这一句
System.out.println("insert"+catalog.getId());//用err打印出来的事红色的,out出来的是黑色的
}catch(Exception e) {
e.printStackTrace();
}finally {
if (sqlsession != null) {
//关闭sqlsession
sqlsession.close();
}
}
}
删除数据
1.先在Catalog.xml中添加
<!-- 删除 -->
<delete id="deleteCatalogById" parameterType="int">
delete from catalog where id=#{
id}
</delete>
2.然后在TestCatalog中添加
//删除
@Test
void testDeleteCatalogById() {
SqlSession sqlsession=null;
try {
// 数据库会话实例
sqlsession=sqlSessionFactory.openSession();
Integer i=sqlsession.delete("test.deleteCatalogById",18);
sqlsession.commit();//凡是增删改都要加这一句
}catch(Exception e) {
e.printStackTrace();
}finally {
if (sqlsession != null) {
//关闭sqlsession
sqlsession.close();
}
}
}
修改数据
1.先在Catalog.xml中添加
<!-- 修改 -->
<update id="updateCatalog" parameterType="cn.qziedu.po.Catalog">
update catalog set title=#{
title},parent_id=#{
parent_id} where id=#{
id}
</update>
2.然后在TestCatalog中添加
//修改
@Test
void testUpdatetCatalog() {
SqlSession sqlsession=null;
try {
// 数据库会话实例
sqlsession=sqlSessionFactory.openSession();
// 添加用户信息
Catalog catalog=new Catalog();
catalog.setTitle("aa");
catalog.setParent_id("0");
catalog.setId(11);
Integer i=sqlsession.insert("test.updateCatalog",catalog);
sqlsession.commit();//凡是增删改都要加这一句
System.err.println("insert"+catalog.getId());//用err打印出来的事红色的,out出来的是黑色的
}catch(Exception e) {
e.printStackTrace();
}finally {
if (sqlsession != null) {
//关闭sqlsession
sqlsession.close();
}
}
}