Mybatis增删改查案例

今天看到mybatis没事就自己弄了弄,由于使用过hibernate,可以发现他两个还是有很多相似的地方的。

废话不多说进入正题:

1.建立项目,现在我建立的项目都是maven的项目,其实只要是java项目都可以的。导入mybatis和mysql包。maven项目如下:

  <dependency>
     <groupId>org.mybatis</groupId>
     <artifactId>mybatis</artifactId>
     <version>3.4.5</version>
    </dependency>
    
   <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.45</version>
    </dependency>

2.新建mybatis的配置文件我使用eclipse新建的是generatorConfig类型的配置文件,但是我没有使用这种类型的配置文件而是使用了如下的配置文件:

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
        "http://mybatis.org/dtd/mybatis-3-config.dtd">  
<configuration>  
    <!--数据源 -->  
    <environments default="user">  
        <environment id="user">  
            <!--事务管理方式 -->  
            <transactionManager type="JDBC"></transactionManager>  
            <!--数据库连接参数 -->  
            <dataSource type="POOLED">  
                <!-- type:数据源连接的方式 ,POOLED:连接池方式, UNPOOLED: 非连接池的方式 ,JNDI:java命名与目录接口方式 -->  
                <property name="driver" value="com.mysql.jdbc.Driver"></property>  
                <property name="url" value="jdbc:mysql://localhost:3306/user"></property>  
                <property name="username" value="root"></property>  
                <property name="password" value="123456"></property>  
            </dataSource>  
        </environment>  
    </environments>  
  
    <!-- 引入实体映射文件 -->  
    <mappers>       
        <mapper resource="com/mybatis/one/UserMapper.xml" />  
    </mappers>  
</configuration>  

3.新建实体类User

package com.mybatis.one;

public class User {
		private int id;
		private String name;
		private String dept;
		private String phone;
		private String website;
		
		public String getWebsite() {
			return website;
		}
		public void setWebsite(String website) {
			this.website = website;
		}
		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 getDept() {
			return dept;
		}
		public void setDept(String dept) {
			this.dept = dept;
		}
		public String getPhone() {
			return phone;
		}
		public void setPhone(String phone) {
			this.phone = phone;
		}
		public User(String name, String dept, String phone, String website) {
			super();
			this.name = name;
			this.dept = dept;
			this.phone = phone;
			this.website = website;
		}
		public User(){
			
		}
		@Override
		public String toString() {
			return "User [id=" + id + ", name=" + name + ", dept=" + dept + ", phone=" + phone + ", website=" + website
					+ "]";
		}	
}

4.新建实体类映射文件UserMapper.xml

 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
 <mapper namespace="firstTest">  
    <!--查询 -->  
    <!-- 查询需要使用select 标签,id是必须给定的属性,而且要求id是唯一的 resultType 表示结果集类型,就是使用哪个实体类来封装数据   
        当实体类的属性名和数据库表的字段名一致的时候,能够自动封装 -->  
    <select id="users" resultType="com.mybatis.one.User">  
        select  
        id,name,phone,website,dept from user  
    </select>  
      
    <!--当传入多个参数的时候, 通过parameterType来指定传入参数的类型 引用的多个参数的名字,必须与指定传入类型的属性名一致 -->  
    <select id="user" parameterType="com.mybatis.one.User"  
        resultType="com.mybatis.one.User">  
        select id,name,phone,website,dept from user where  
        name=#{name} and phone=#{phone}  
    </select>  
    <!-- 修改操作 -->  
    <update id="updateuser" parameterType="com.mybatis.one.User" flushCache="true" statementType="PREPARED" >
    update user set  name=#{name},phone=#{phone},website=#{website},dept=#{dept}
     where id =#{id}
    
    </update>  
    <!-- 添加操作 -->  
    <insert id="insertuser" parameterType="com.mybatis.one.User"  useGeneratedKeys="true" keyProperty="id" >
    insert into user(name,phone,website,dept)
     values(#{name},#{phone},#{website},#{dept})
    
    </insert>
    <!-- 删除操作 -->  
    <delete id="deleteuser" parameterType="int" >
    delete from user where id=#{id}
    </delete>
</mapper>

5.新建测试类Test

package com.mybatis.one;

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;
/**
 * @author Yh
 *
 */
public class Test {
 
    public static void main(String[] args) throws IOException {
        String resource = "generatorConfig.xml";
        Reader reader = null;  
        SqlSessionFactoryBuilder factoryBuilder = null;  
        SqlSessionFactory factory = null;  
        SqlSession sqlSession = null;  
        try {  
            // 以字符流的方式读取配置文件  
            reader = Resources.getResourceAsReader(resource);  
            // 准备获取工厂对象  
            factoryBuilder = new SqlSessionFactoryBuilder();  
            // 得到工厂对象  
            factory = factoryBuilder.build(reader);  
            // 获得数据库连接  
            sqlSession = factory.openSession();  
  
            // 查询所有的用户信息 执行查询,传递的参数 是 namespace.id 亲测不用namespace直接使用id也可以
            List<User> usersList = sqlSession  
                    .selectList("firstTest.users");  
            User  users =  null;
            for (User user: usersList) {  
                System.out.println(user.toString());
                users = user;
            }  
              
           
            // 进行登录验证  
            User u = new User();
            u.setName("zhangsan");  
            u.setPhone("1302323322");  
            User user= sqlSession.selectOne(  
                    "firstTest.user", u);  
            if(user != null){
            	System.out.println("存在相对应的数据!");
            }else{
            	System.out.println("不存在相对应的数据!");
            }
            
            User d = new User("zhangsan","dsf","1302325322","http://www.baidu.com");
            int a = sqlSession.insert("firstTest.insertuser", d);
            System.out.println("新增数据返回的值是:"+a);
           
           users.setWebsite("http://www.df.com");
           int b = sqlSession.update("updateuser", users);
           System.out.println("数据修改后的返回值是:"+b);
        
           int  c = sqlSession.delete("deleteuser",2);
           System.out.println("删除数据返回的值是:"+c);
           
        // sqlSession.rollback();//如果数据不提交执行事务回滚的话,前面一切没有提交的操作都将回滚。
           sqlSession.commit();//如果事物不提交,那么修改、新增、删除操作失效,数据不改变
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            if (sqlSession != null) {  
                sqlSession.close();  //关闭SqlSession
            }  
        }  
    }
}

6.我没有配置自动新建表,请自己新建数据库和表。

总结:

SqlSession 中使用selectOne时如果选取的数据有多条,那么将出错。


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

*********************************有什么问题请留言或者私聊,谢谢!********************************************

猜你喜欢

转载自blog.csdn.net/qq_26584263/article/details/80350545