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

扫描二维码关注公众号,回复: 1657704 查看本文章

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配置方式







猜你喜欢

转载自blog.csdn.net/qq_35255384/article/details/79364295