此項目不是maven項目,也是創建Dynamic Web Project
兩種開發方式:Dao開發方式,Mapping代理開發方式
使用原始dao開發的缺點就是隻能通過selectOne或者selectList等操作,而不是直接調用映射配置文件中的方法,不能一目瞭然。
本文爲Mapping代理開發方式。
mybatis,有兩個配置文件
全局配置文件SqlMapConfig.xml(配置數據源,全局變量,加載映射文件等東西)
映射文件xxxMapper.xml,用來對輸入參數輸出參數,數據庫語句做配置的。
mybatis配置好之後的使用步驟
1、獲取sqlMapConfig.xml的位置然後進行加載
2、通過sqlMapConfig.xml中的內容創建出sqlsessionFactory對象
3、然後通過sqlsessionFactory對象創建出sqlsession對象
4、有了sqlsession對象就可以進行相應的操作了。
工程目錄:
步驟:
前置:創建數據庫,數據表,添加數據。
1.添加jar (WebContent/WEB-INF/lib目錄下添加)
2.pojo [User.java](添加到數據裏各個數據的get/set方法)
3.設置mybatis配置文件 [conf.xml] (直接放置在src下,不需要放包下)
4.配置數據表的映射文件 [UserMapping.xml]
5.Dao接口類 [IUserOperaton.java]
6.實現方法 [Test.java]
具體:
前置:
create database mybatis;
create table user(
id int primary key auto_increment,
name varchar(20),
age int);
1.添加jar
只需添加兩個jar: mybatis-3.4.5.jar 和 mysql-connector-java-5.5.10.bin.jar
一個是mybatis核心包,另一個是mysql驅動包
2.pojo
public class User {
private int id;
private String name;
private int age;
..省略get/set語句..
}
3.設置mybatis配置文件conf.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">
<!-- mybatis的配置文件 -->
<configuration>
<!-- 定義別名 -->
<typeAliases>
<!-- 單個別名的定義 : type:別名映射的類型 ,alias:別名-->
<!-- <typeAlias type="com.mybatis.test.User" alias="user"/> -->
<!-- 批量別名定義 : 指定包路徑,自動掃描包下邊的pojo,定義別名,別名默認爲類名(首字母小寫或大寫) -->
<package name="com.mybatis.test"/>
</typeAliases>
<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/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="zhan98910ABCD"/>
</dataSource>
</environment>
</environments>
<!-- mybatis的mapper文件,每個xml配置文件對應一個接口 -->
<mappers>
<mapper resource="com/mybatis/mapping/UserMapping.xml"/>
</mappers>
</configuration>
4.定義數據表的映射文件(一般命名爲:表名+Mapping)
名字與配置文件conf.xml裏<mappers>相對應
<?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">
<!-- 定義user表的映射文件 -->
<!-- 爲mapper指定唯一的namespace,一般設置爲包名+sql映射文件名 -->
<mapper namespace="com.mybatis.test.IUserOperaton">
<!--
id屬性是唯一的,不能重複
parameterType:查詢時使用的參數類型
resultType:查詢返回的結果集類型
-->
<select id="SelectAll" parameterType="com.mybatis.test.User" resultType="User">
select * from user
</select>
<select id="SelectById" parameterType="int" resultType="com.mybatis.test.User">
select * from user where id = #{id}
</select>
<select id="SelectByName" parameterType="String" resultType="com.mybatis.test.User">
select * from user where name = #{name}
</select>
<update id="UpdateUser" parameterType="com.mybatis.test.User">
update user set name = #{name},age = #{age} where id = #{id}
</update>
<!--
useGeneratedKeys="true"表明要MyBatis獲取由數據庫自動生成的主鍵;
keyProperty="id"指定把獲取到的主鍵值注入到User的id屬性
-->
<insert id="InsertUser" parameterType="com.mybatis.test.User" useGeneratedKeys="true" keyProperty="id">
insert into user(name,age) values(#{name},#{age})
</insert>
<delete id="DeleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
</mapper>
5.Dao接口類
package com.mybatis.test;
import java.util.List;
//所有的接口名與UserMapping的id名對應
public interface IUserOperaton {
public List<User> SelectAll();
public User SelectById(int id);
public List<User> SelectByName(String name);
public void UpdateUser(User user);
public void InsertUser(User user);
public void DeleteUser(int id);
}
6.實現方法,測試
package com.mybatis.test;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
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;
//所有方法名爲實現IUserOperaton接口
public class Test {
//private static InputStream inputStream;
private static Reader reader;
private static SqlSessionFactory sqlSessionFactory;//會話工廠
static {
try {
//配置文件conf.xml
String resource= "conf.xml";
//inputStream = Resources.getResourceAsStream(resource);
reader = Resources.getResourceAsReader(resource);
//創建會話工廠
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void getUserAll() {
// 通過工廠得到SqlSession
SqlSession session = sqlSessionFactory.openSession();
try {
//創建代理對象
IUserOperaton iUserOperaton = session.getMapper(IUserOperaton.class);
List<User> users = iUserOperaton.SelectAll();
for(User user : users) {
System.out.println("id is = " + user.getId() + "name is = " + user.getName() + ",age is = " + user.getAge());
}
}finally {
session.close();
}
}
public void getUserById(int id) {
// 通過工廠得到SqlSession
SqlSession session = sqlSessionFactory.openSession();
try {
//創建代理對象
IUserOperaton iUserOperaton = session.getMapper(IUserOperaton.class);
User user = iUserOperaton.SelectById(id);
System.out.println("name is = " + user.getName() + ",age is = " + user.getAge());
}finally {
session.close();
}
}
public void getUserByName(String name) {
// 通過工廠得到SqlSession
SqlSession session = sqlSessionFactory.openSession();
try {
//創建代理對象
IUserOperaton iUserOperaton = session.getMapper(IUserOperaton.class);
List<User> users = iUserOperaton.SelectByName(name);
for(User user : users) {
System.out.println("name is = " + user.getName() + ",age is = " + user.getAge());
}
}finally {
session.close();
}
}
public void updateUser() {
// 通過工廠得到SqlSession
SqlSession session = sqlSessionFactory.openSession();
try {
//創建代理對象
IUserOperaton iUserOperaton = session.getMapper(IUserOperaton.class);
User user = iUserOperaton.SelectById(3);
if(user != null) {
user.setName("three");
iUserOperaton.UpdateUser(user);
session.commit();
}
}finally {
session.close();
}
}
public void deleteUser(int id) {
// 通過工廠得到SqlSession
SqlSession session = sqlSessionFactory.openSession();
try {
//創建代理對象
IUserOperaton iUserOperaton = session.getMapper(IUserOperaton.class);
iUserOperaton.DeleteUser(id);
session.commit();
}finally {
session.close();
}
}
public void insertUser() {
User user = new User();
user.setName("two");
user.setAge(33);
// 通過工廠得到SqlSession
SqlSession session = sqlSessionFactory.openSession();
try {
//創建代理對象
IUserOperaton iUserOperaton = session.getMapper(IUserOperaton.class);
iUserOperaton.InsertUser(user);
session.commit();
System.out.println("userid:" + user.getId());
}finally {
session.close();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test test = new Test();
test.getUserAll();
test.getUserById(3);
test.getUserByName("two");
test.insertUser();
test.updateUser();
test.deleteUser(3);
}
}