Mybatis增刪改查實例

------1,採用xml配置方式來做

建表語句:

採用sqlserver數據庫     庫名爲:test

use test;
CREATE TABLE dbo.user1(
id int IDENTITY(1,1) NOT NULL,
NAME varchar(20) DEFAULT NULL,
age int DEFAULT NULL,
PRIMARY KEY (id));

1,先寫個共有類來做連接及關閉連接

package com.cn.mybatis;
import java.io.IOException;
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;
public class MybatisUtils {
    public static SqlSession getSession(){
        InputStream inputStream = null;
        SqlSessionFactory sessionFactory=null;
        SqlSession session = null;
        try {
            inputStream = Resources.getResourceAsStream("com/cn/sources/mybatisConf.xml");
            sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            session = sessionFactory.openSession(true);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return session;
    }
    public static void closeSession(SqlSession session) throws IOException{
        if(session != null){
            session.close();
        }                
    }

}

2,數據庫連接mybatisConf.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">
<!-- 這裏是採用xml註解方式來進行獲取到Configuration  -->
<configuration>  
  <properties resource="dataSource.properties"/>  
      <environments default="development">        
         <environment id="development">        
                 <transactionManager type="jdbc"/>                
                 <dataSource type="pooled">                  
                      <property name="driver" value="${driver}"/>
                      <property name="url" value="${url}"/>
                      <property name="username" value="${username}"/>
                      <property name="password" value="${password}"/>                
                 </dataSource>                   
         </environment>
      </environments>
      <mappers>
          <mapper resource="com/cn/sources/mapper.xml"/>
      </mappers>
</configuration>

3,數據庫連接的參數放置在src下    dataSource.properties

url=jdbc:sqlserver://chot3r8csts02:1433;DatabaseName=test
username=devplogin
password =devplogin

driver=com.microsoft.sqlserver.jdbc.SQLServerDriver

4,編寫mapper.xml配置文件內容,放置sql語句

<?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="com.cn.sources">
  <insert id="insertUser" parameterType="com.cn.bean.User">
      insert into user1(name,age) values(#{name},#{age})
  </insert>  
  <select id="selectUser" parameterType="int" resultType="com.cn.bean.User">
    select * from user1 where id=#{id}    
  </select>
  <update id="updateUser" parameterType="Object">
      update user1 set name = #{0}
  </update>

</mapper>

5,編寫實體類

package com.cn.bean;
import java.io.Serializable;
/**
 * @author yuchao
 *
 * @school 南陽理工軟件學院移動設備應用與開發移動四班
 *
 * @email [email protected]
 *
 * @time 2014年10月2日 下午7:45:52
 */

@SuppressWarnings("serial")
public class User implements Serializable {

    private int id;
    private String name;
    private int age;

    public User() {
    }

    public User(int id, String name, int age) {

        this.id = id;
        this.name = name;
        this.age = age;
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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 int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
    }

}


6,開始連接測試增刪改查

package com.cn.mybatis;

import java.io.IOException;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import com.cn.bean.User;

/**
 * @author yuchao
 *
 * @school 南陽理工軟件學院移動設備應用與開發移動四班
 *
 * @email [email protected]
 *
 * @time 2014年10月2日 下午7:56:43
 */
public class TestMybatis {    
    @Test
    public void testInsert() throws IOException{
        SqlSession session = null;
        try{
        //注:該路徑填寫相對路徑    propoties文件一定要放在src下面,否則容易引發錯誤        
        session = MybatisUtils.getSession();
        User user = new User("餘超", 21);
        String statement = "com.cn.sources.insertUser";
        int i = session.insert(statement, user);
        if (i == 1)
            System.out.println("新增加用戶成功!!!!");
        else
            System.out.println("添加用戶失敗!!!");
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            MybatisUtils.closeSession(session);
        }
    }
    @Test
    public void testSelect() throws IOException{
        SqlSession session = null;
        try{
        //注:該路徑填寫相對路徑    propoties文件一定要放在src下面,否則容易引發錯誤        
        session = MybatisUtils.getSession();
        String statement = "com.cn.sources.selectUser";
        List<User> list = session.selectList(statement, 1);
        if(list != null && list.size()>0){
            for(User user : list){
                System.out.println("用戶名爲:"+ user.getName() + ",年齡爲:" + user.getAge());
            }
        }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            MybatisUtils.closeSession(session);
        }
    }
    @Test
    public void testUpdate() throws IOException{
        SqlSession session = null;
        try{
        //注:該路徑填寫相對路徑    propoties文件一定要放在src下面,否則容易引發錯誤        
        session = MybatisUtils.getSession();
        String statement = "com.cn.sources.updateUser";        
        session.update(statement, "浪君");//如果update語句中包含多個傳參則還不能直接用這種方式        
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            MybatisUtils.closeSession(session);
        }
    }        
    
}

----------------------第二種方式是完全不使用xml配置文件,採用註解的方式來做

1,編寫實體類

package com.cn.bean;
import java.io.Serializable;
/**
 * @author yuchao
 *
 * @school 南陽理工軟件學院移動設備應用與開發移動四班
 *
 * @email [email protected]
 *
 * @time 2014年10月2日 下午7:45:52
 */

@SuppressWarnings("serial")
public class User implements Serializable {

    private int id;
    private String name;
    private int age;

    public User() {
    }

    public User(int id, String name, int age) {

        this.id = id;
        this.name = name;
        this.age = age;
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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 int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
    }

}

2,編寫映射類,做sql查詢及接口方法

package com.cn.mybatis;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.cn.bean.User;

public interface BlogMapper {
    @Select("SELECT * FROM user1 WHERE id = #{id}")
    User selectUser(int id);
    @Delete("delete from user1 where id = #{id}")
    void deleteUser(int id);
    @Update("update user1 set name = #{name} where id = #{id}")
    void updateUser(@Param("name")String name,@Param("id")int id);
}

3,連接及增刪改查

package com.cn.mybatis;

import java.util.Properties;

import javax.sql.DataSource;

import org.apache.ibatis.datasource.pooled.PooledDataSourceFactory;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.junit.Test;

import com.cn.bean.User;

public class TestMybatisOther {
    private static final SqlSessionFactory SqlSessionFactory;
    static{
        SqlSessionFactory = getSqlSessionFactory();
    }
    @Test
    public void testSelect(){
        SqlSession session = getSqlSession();
        try {
              BlogMapper mapper = session.getMapper(BlogMapper.class);
              User user = mapper.selectUser(2);
              System.out.println("用戶名爲:"+ user.getName() + ",年齡爲:" + user.getAge());
            } finally {
              session.close();
            }        
    }
    @Test
    public void testDelete(){
        SqlSession session = getSqlSession();
        try {
              BlogMapper mapper = session.getMapper(BlogMapper.class);
              mapper.deleteUser(1);
              session.commit();
              System.out.println("刪除成功!");
            } finally {
              session.close();
            }
    }
    @Test
    public void testUpdate(){//傳入多個參數可使用註解的方式
        SqlSession session = getSqlSession();
        try {
              BlogMapper mapper = session.getMapper(BlogMapper.class);
              mapper.updateUser("志豪", 2);
              session.commit();
              System.out.println("更新成功!");
            } finally {
              session.close();
            }
    }
    
    //SqlSessionFactory最好被創建一次而不要被多次創建
    public static SqlSessionFactory getSqlSessionFactory(){
        PooledDataSourceFactory pooledDataSourceFactory = new PooledDataSourceFactory();
        pooledDataSourceFactory.setProperties(getProperties());
        DataSource dataSource = pooledDataSourceFactory.getDataSource();
        TransactionFactory transactionFactory = new JdbcTransactionFactory();//加入事務控制,需要注意的是:需要在執行後commit否則默認會執行回滾操作
        Environment environment = new Environment("development", transactionFactory, dataSource);
        Configuration configuration = new Configuration(environment);
        configuration.addMapper(BlogMapper.class);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
        return sqlSessionFactory;
    }
    //SqlSession可被多次創建
    public static SqlSession getSqlSession(){
        //不採用xml方式獲取到configuration                    
        SqlSession session = SqlSessionFactory.openSession();
        return session;
    }
    
    //獲取數據庫連接信息並放置到Properties文件中
    public static Properties getProperties(){
        Properties properties = new Properties();
        properties.setProperty("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver");
        properties.setProperty("url", "jdbc:sqlserver://chot3r8csts02:1433;DatabaseName=test");
        properties.setProperty("username", "devplogin");
        properties.setProperty("password", "devplogin");
        return properties;
    }
}

--------總結:各有各的好處,一般用的多的是xml配置方式







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