spring+mybatis框架之表的增删改查

1 设计学生信息表 有如下字段 id stuName age school address

2 编写基于 mybatis 的程序,完成对该表的增,删,改,查,查询全部等功能,并调试通过。

 

一、 spring中的注解方式


   它是从spring 2.5开始出现的 

   1) 要引入名称空间 context 
   2) 开启自动扫描
  <context:component-scan base-package="com.dao"  />
    <context:component-scan base-package="com.controller"  />
    
  自动扫描,会把指定的包及其子包下的类纳入spring容器管理
  ,但并不是全部,只有带有以下注解的类才会被纳入spring管理
  
   @Controller  //用于控制层
   @Service  //用于业务层
   @Repository  //用于持久层
   @Component  //用于其他组件
   
   经过扫描纳入spring管理的对象,默认的名字是类名首字线小写
   
   关于Resource 注解
   
   它的作用,就是帮我们注入依赖对象的,比如

        @Controller
        public class UserController {
            //这个注解,是专门用来注入依赖对象的
            @Resource(name="userDaoImplMySql")
            private IUserDao dao;
        
            public void service() {
                dao.addUser();
                dao.addUser();
                dao.delUser();
            }
        }
        
     说明:
     1) @Resource  是 javax.annotation.Resource 出身
     2) @Resource 默认按名称注入,然后按类型注入,如果指明了
         名称,则严格按名称
     
     3) 在jdk9及以后的版本中,使用@Resource要额外引入jar
         
     另一个常用注解:
       @Autowired 它的功能和 @Resource 基本相同,它的出身是
        org.springframework.beans.factory.annotation.Autowired
        它默认是按类型进行匹配
        如果也想按名称进行注入,要和另一个注解一起使用
     
        @Autowired @Qualifier("userDaoImplOracle")
        

二、 mybatis 框架简介


     mybatis 是apache 的一个开源项目,它是一个半ORM框架
     
     ORM: 对象模型 到 关系模型之间的映射
     
     对象模型 其实就是java中的类的结构
     class Student{
             int id;
             String stuName;
             int age;
             String school;
     }
      
     关系模型 其实就是数据库中的表结构 
     create table (id int, stuName varchar(20),age int,school varchar(30))
     
     一个student 对象(对象模型) 和表中的一条数据对应(关系模型)
     
     mybatis 中的几个重要对象 
     1) 主配置文件 
       mybatis-config.xml //名称不是绝对
       配置数据源,事务等运行环境,引入其他的映射文件
     
     2) SqlSessionFactory
       会话工厂,根据配置文件创建的,用来创建SqlSession
       
     3) SqlSession
        称为会话,是一个接口,帮我们进行数据库操作
        增,删,改,查
        它就相当于JDBC中的 Connection 对象
        要注意,它和javaweb中的 Session 一点关系也没有 

三、入门程序


     1) 导包
              mybatis-3.5.5.jar
              mysql-connector-java-5.1.7-bin.jar
              
     2) 配置数据库相关的配置文件,我们可以把所有的配置文件
         都放在一个源文件夹下
         建一个 叫 config 的 "源" 文件夹,和src平级
         在它下面建 db.properties 这个的一个数据库配置文件
     
       内容:
            db.driver=com.mysql.jdbc.Driver
            db.url=jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=UTF8
            db.userName=root
            db.password=root
            #db.driver=com.mysql.cj.jdbc.Driver
            #db.url=jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=UTF8&serverTimezone=UTC
    
     3) 编写mybatis的主配置文件     mybatis-config.xml
         放在 config 下
         
            <?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">  
            <configuration>      
                <!-- 读入属性文件 -->
                <properties resource="db.properties" />  
                
                <environments default="development">    
                   <environment id="development">  
                       <transactionManager type="JDBC"/>  
                       <dataSource type="POOLED">   
                           <property name="driver" value="${db.driver}"/>  
                           <property name="url" value="${db.url}"/>  
                           <property name="username" value="${db.userName}"/>  
                           <property name="password" value="${db.password}"/>  
                       </dataSource>  
                   </environment>  
                </environments>  
               
            </configuration> 
            
     4) 编写映射文件 (会有多个,通常来说,一个表一个)
      可以在config下,再建一个目录,叫 mappings,专门用来放
      这些映射文件 
      
      比如 对实体类UserInfo编写配置文件
      
            public class UserInfo {
                private int id;
                private String userName;
                private String password;
                private String note;
                ... get set 方法
                ... toString()..
            } 
            
            在 config/mappings/ 下建 UserInfo.xml 
            
            <?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="xxx">
                <select id="getUserById" parameterType="int" resultType="com.beans.UserInfo">
                    select * from userInfo where id = #{id}
                </select>
            </mapper>
                        
            注意三个地方
            (1)namespace 不要忘了
            (2)占位不是用? 而是换成了 #{id}
            (3)不要忘了在主配置文件 mybatis-config.xml 中引入这个映射文件
                <mappers>
                    <mapper resource="mappings/UserInfo.xml"/>
                </mappers>
                
    5) 测试    
        public class Test {
            public static void main(String[] args) throws IOException {
                InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
                
                //创建会话工厂
                SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
                
                //创建会话 ,它是线程不安全的,一定要做成局部变量
                SqlSession session =factory.openSession(); 
                
                //使用session进行数据库操作
                UserInfo user=session.selectOne("xxx.getUserById",1);
                System.out.println(user);
                
                session.close();    
            }
        }
        
====  增,删,改,查
  上例中 的  parameterType="int" 是可以省去的,如果不省去,
  在传参的时候,一定要注意类型要匹配 比如 1 不能传成 "1"
  select * from userInfo where id = #{id}
  后面的#{id} 这个占位,如果传的参数是简单类型,则#{} 中间的
  内容可以任意
  
  //增删改查
    <?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="xxx">
        <select id="getUserById" parameterType="int" resultType="com.beans.UserInfo">
            select * from userInfo where id = #{dog}
        </select>
        
        <insert id="addUser" parameterType="com.beans.UserInfo" >
            insert into userInfo (userName,password,note) values(#{userName},#{password},#{note} ) 
        </insert>
        
        <update id="updateUser" parameterType="com.beans.UserInfo" >
            update userinfo set userName=#{userName}, password=#{password},note=#{note} where id=#{id}
        </update>
        
        <delete id="deleteUser" parameterType="int">
            delete from userInfo where id=#{id}
        </delete>
        
        <select id="getAll"  resultType="com.beans.UserInfo">
            select * from userinfo 
        </select>
        
    </mapper>
    
    测试
    public class Test {
        public static void main(String[] args) throws IOException {
            //testGet() ;
            
            //testAdd();
            
            //testUpdate();
            
            //testDelete();
            
            testGetAll();
        }
        
        static void testGetAll()throws IOException {
            InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
            SqlSession session =factory.openSession(); 
            
            List<UserInfo> userList=session.selectList("xxx.getAll");
            
            for(UserInfo u:userList) {
                System.out.println(u);
            }
            
            session.close();    
        }
        
        static void testDelete() throws IOException{
            InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
            SqlSession session =factory.openSession(); 
            
            int result=session.delete("xxx.deleteUser",4);
            System.out.println(result==1?"删除成功":"删除失败");
            
            session.commit();
            session.close();    
        }
        static void testUpdate() throws IOException {
            InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
            SqlSession session =factory.openSession(); 
            
            UserInfo user=session.selectOne("xxx.getUserById",4);
            user.setUserName("川建国");
            user.setPassword("cjg");
            user.setNote("祖国在他的心中");
            
            int result=session.update("xxx.updateUser",user);
            System.out.println(result==1?"更新成功":"更新失败");
            session.commit();
            
            session.close();    
        }
        
        
        static void testAdd() throws IOException {
            InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
    
            SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
            
            SqlSession session =factory.openSession(); 
            
            UserInfo user=new UserInfo();
            user.setUserName("赵明明");
            user.setPassword("zmm");
            user.setNote("超级管理员");
            
            int result =session.insert("xxx.addUser",user);
            
            System.out.println(result==1?"添加成功":"添加失败");
            
            //对于增,删,改类的方法,一定要提交事务才行
            session.commit();
            
            session.close();    
        }
        
        
        static void testGet() throws IOException {
            InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
            
            //创建会话工厂
            SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
            
            //创建会话 ,它是线程不安全的,一定要做成局部变量
            SqlSession session =factory.openSession(); 
            
            //使用session进行数据库操作
            UserInfo user=session.selectOne("xxx.getUserById",1);
            System.out.println(user);
            
            session.close();    
        }
    }

   四、Navicat-建shop库-建stuinfo表
            
        

Test.java

package com.beans;
import java.io.IOException;
import java.io.InputStream;
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;

public class Test {
	public static void main(String[] args) throws IOException {
		//获得指定ID的学生信息
		//testGet() ;
		
		//增加指定ID的学生信息
		//testAdd();
		
		//更新指定ID的学生信息
		//testUpdate();
		
		//删除指定ID的学生信息
		//testDelete();
		
		//获得所有学生的信息
		//testGetAll();
	}
	
	static void testGetAll()throws IOException {
		InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
		SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
		SqlSession session =factory.openSession(); 
		
		List<UserInfo> userList=session.selectList("xxx.getAll");
		
		for(UserInfo u:userList) {
			System.out.println(u);
		}
		
		session.close();	
	}
	
	static void testDelete() throws IOException{
		InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
		SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
		SqlSession session =factory.openSession(); 
		
		int result=session.delete("xxx.deleteUser",3);
		System.out.println(result==1?"删除成功":"删除失败");
		
		session.commit();
		session.close();	
	}
	static void testUpdate() throws IOException {
		InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
		SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
		SqlSession session =factory.openSession(); 
		
		UserInfo user=session.selectOne("xxx.getUserById",8);
		user.setStuName("小红");
		user.setage(12);
		user.setschool("江南哈师大");
		user.setAddress("黑龙江佳木斯");
		
		int result=session.update("xxx.updateUser",user);
		System.out.println(result==1?"更新成功":"更新失败");
		session.commit();
		
		session.close();	
	}
	
	
	static void testAdd() throws IOException {
		InputStream in= Resources.getResourceAsStream("mybatis-config.xml");

		SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
		
		SqlSession session =factory.openSession(); 
		
		UserInfo user=new UserInfo();
		user.setId(3);
		user.setStuName("天羽");
		user.setage(12);
		user.setschool("黑大");
		user.setAddress("齐齐哈尔");
		
		int result =session.insert("xxx.addUser",user);
		
		System.out.println(result==1?"添加成功":"添加失败");
		
		
		//对于增,删,改类的方法,一定要提交事务才行
		session.commit();
		
		session.close();	
	}
	
	
	static void testGet() throws IOException {
		InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
		
		//创建会话工厂
		SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
		
		//创建会话 ,它是线程不安全的,一定要做成局部变量
		SqlSession session =factory.openSession(); 
		
		//使用session进行数据库操作
		UserInfo user=session.selectOne("xxx.getUserById",8);
		System.out.println(user);
		
		session.close();	
	}
}

UserInfo.java

package com.beans;

public class UserInfo {
	private int id;
	private String stuName;
	private int age;
	private String school;
	private String address;
	
	public String toString() {
		return "stuInfo [id=" + id + ", stuName=" + stuName + ", age=" + age + ", school=" + school+ ",address=" +address+ " ]";
	}

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getStuName() {
		return stuName;
	}
	public void setStuName(String stuName) {
		this.stuName = stuName;
	}
	public int getage() {
		return age;
	}
	public void setage(int age) {
		this.age = age;
	}
	public String getschool() {
		return school;
	}
	public void setschool(String school) {
		this.school = school;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}

}

 

五、运行截图

1、获得指定ID的学生信息 testGet() ;

2、增加指定ID的学生信息  testAdd(); 

 

 

 3、更新指定ID的学生信息
        testUpdate();

 

4、删除指定ID的学生信息
        testDelete();

 

 

5、 获得所有学生的信息
        testGetAll();

 


         
         
        
                

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无处安放的小曾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值