一、先附上項目層級目錄:
二、主配置文件:sqlMapConfig.xml
配置mapper時一定要搞清它和你的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>
<!-- 在集成spring 是不用 -->
<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/skh?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="usbw"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/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">
<mapper namespace="UserMapper"><!-- 可能會有多個mapper配置文件 相當於給mapper配置文件另起一個名字 -->
<!-- parameterType 爲sql語句中的參數類型
resultType 查詢結果返回類型
-->
<select id="selectById" parameterType="int" resultType="cn.skh.bean.User">
select * from qwe where id = #{id}
</select>
<select id="selectUserByName" parameterType="String" resultType="cn.skh.bean.User">
<!-- 根據名字模糊查詢用戶 -->
<!-- #{} 佔位符 儘量選用#{}來解決問題 佔位符接收的傳值會自動加上雙引號 所以不需要在另外加引號-->
<!-- ${} 字符串拼接 or 1=1 王 -->
<!-- 字符串拼接寫法select * from qwe where name like '%${value}%' -->
select * from qwe where name like "%"#{name}"%"
<!-- 等價於select * from qwe where name like '%王%' 不過參數 王 不需要另加引號 只需給%加即可 -->
</select>
<insert id="insertUser" parameterType="cn.skh.bean.User">
<!-- 佔位符#{}中的內容要更具實體類中的變量名來寫 #{id}等價於cn.skh.bean.User.id-->
insert into qwe values(#{id},#{name},#{password},#{sex})
</insert>
<update id="updateUser" parameterType="cn.skh.bean.User">
update qwe set name = #{name} where id = #{id}
</update>
<delete id="deleteUserById" parameterType="int">
delete from qwe where id = #{id}
</delete>
</mapper>
三、JavaBean以及數據庫表結構
package cn.skh.bean;
/**
* 需要注意的地方 bean中的屬性名稱要和數據庫中的屬性名稱相對性
* 屬性和數據庫中字段的名稱要一樣 不能這個是name 那個是username
* @author SKH
*
*/
public class User {
private int id;
private String name;
private String password;
private String sex;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + name + ", password=" + password + ", sex=" + sex + "]";
}
}
id int 11
name varchar 255
password varchar 255
sex varchar 255
四、測試類
package cn.skh.test;
import java.io.IOException;
import java.io.InputStream;
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.skh.bean.User;
public class HelloMyBatis {
//測試入門程序 通過id查詢用戶
private static void test() throws IOException {
//讀取配置文件
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
//建造一個建造工廠的東東
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
//通過配置文件建造工廠
SqlSessionFactory ssf = ssfb.build(in);
//通過工廠生產商品
SqlSession session = ssf.openSession();
//使用商品 即操作數據庫
//參數1:要操作的sql語句 參數2:sql語句的參數
//UserMapper.selectById . 之前爲UserMapper配置文件的命名空間 之後爲select的id屬性值
User u = session.selectOne("UserMapper.selectById",1);
System.out.println(u);
}
//模糊查詢
private static void test2() throws IOException {
//讀取配置文件
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
//建造一個建造工廠的東東
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
//通過配置文件建造工廠
SqlSessionFactory ssf = ssfb.build(in);
//通過工廠生產商品
SqlSession session = ssf.openSession();
//使用商品 即操作數據庫
List<User> us = session.selectList("UserMapper.selectUserByName","逯");
for(User u:us) {
System.out.println(u);
}
}
private static void test3() throws IOException {
//讀取配置文件
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
//建造一個建造工廠的東東
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
//通過配置文件建造工廠
SqlSessionFactory ssf = ssfb.build(in);
//通過工廠生產商品
SqlSession session = ssf.openSession();
//使用商品 即操作數據庫
User u = new User();
u.setId(7);
u.setName("mlk");
u.setPassword("123456");
u.setSex("女");
session.insert("UserMapper.insertUser", u);
session.commit();//提交事務纔會生效
}
private static void test4() throws IOException {
//讀取配置文件
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
//建造一個建造工廠的東東
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
//通過配置文件建造工廠
SqlSessionFactory ssf = ssfb.build(in);
//通過工廠生產商品
SqlSession session = ssf.openSession();
//使用商品 即操作數據庫
User u = new User();
u.setId(0);
u.setName("zxx&SKh");
session.update("UserMapper.updateUser", u);
session.commit();//提交事務纔會生效
}
private static void test5() throws IOException {
//讀取配置文件
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
//建造一個建造工廠的東東
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
//通過配置文件建造工廠
SqlSessionFactory ssf = ssfb.build(in);
//通過工廠生產商品
SqlSession session = ssf.openSession();
//使用商品 即操作數據庫
session.delete("UserMapper.deleteUserById", 7);
session.commit();//提交事務纔會生效
}
public static void main(String[] args) throws IOException {
//test();//查詢
//test2();//查詢
//test3();//添加
//test4();//修改
//test5();//刪除
}
}
五、最後附上一日誌文件(不一定必須要放在你的項目裏)
要注意此日誌文件要與你的sqlConfig.xml處於同一及目錄
# 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