Mybatis增刪改查(連接mysql數據庫)

此項目不是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);
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章