Mybatis-命名空间绑定接口的实现方式

关于命名空间的两种绑定方式

1.命名空间可以绑定接口 可以是持久化类
2.无论绑定接口还是绑定类 都以类路径的形式绑定
3.绑定接口:相当于把xml当作接口的实现类
4.<select> 等标签的 id必须与接口中的方法同名!!

绑定接口的案例

1.项目架构

在这里插入图片描述

2.编写实体类

package com.iflytek.domain;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class User {
	    private int id;
	    private String username;
	    private String password;
		@Override
		public String toString() {
			return "UserInfo [id=" + id + ", username=" + username + ", password=" + password + "]";
		}
}

toString()方法可以省略!!

3.编写UserDao接口

package com.iflytek.dao;

import java.util.List;

import com.iflytek.domain.User;

public interface UserDao {
	/* 接口中只承诺方法,不实现
	 * ��mybatis����Ҫ����ʵ���࣬implement�˽ӿ�
	 * ���Ǵ�����Ӧ��Mapper�ļ�  �˴���Ӧ����UserDaoMapper.xml*/
    List<User> getAllUser();
    User getOneById(int id);
    int insertNewUser(User user);
    int deleteUserById(int id);
    int updateUser(User user);
    
}

insertNewUser()、deleteUserById()、updateUser()返回值类型可以为void

4.编写Mybatis主配置文件

<?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文件:键值对的形式 -->
       <!--  相对路径从src开始寻找 -->
     <properties resource="db.properties"></properties>
       <!-- 给类取别名 是一个集合  可以有多个typeAlias-->
     <typeAliases>
             <!--      type:类名+包名 建议直接复制限定名 -->
         <typeAlias type="com.iflytek.domain.User" alias="User"/>
     </typeAliases>  
     <!-- 配置多个环境  default:当前使用的环境 --> 
     <environments default="development">
        <environment id="development">
           <transactionManager type="JDBC"/><!-- 事务管理 -->
           <dataSource type="POOLED"> <!-- 配置数据库连接池:存放连接 对程序来说本质就是一个数据源 -->
              <property name="driver" value="${driver}"/><!-- value="com.mysql.jdbc.Driver" 写法也可以-->
              <property name="url" value="${url}"/>
              <property name="username" value="${username}"/>
              <property name="password" value="${password}"/>
           </dataSource>
        </environment>
     </environments>
     
     <!-- 将 UserDaoMapper.xml包含到主配置文件中-->
     <mappers>
         <mapper resource="com/iflytek/mapper/UserDaoMapper.xml"/>
     </mappers>
</configuration>

5.编写UserDaoMapper.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="com.iflytek.dao.UserDao"><!-- 命名空间为接口 可以是持久化类   -->
  <!-- 此处为接口  以类路径的形式绑定  相当于把xml当作接口的实现类 -->
      <!-- 返回结果集 -->
   <!--  <resultMap type="User" id="UserList">
     <id column="id" property="id"/>id代表主键 column:表中的字段  property:实体类的属性
     result:普通字段
     <result column="username" property="username"/>
     <result column="password" property="password"/>
   </resultMap> -->
   <!-- id必须与接口中的方法同名!! resultType:返回值类型 在mybatis主配置文件中已经取郭别名,此处可以直接用User代替com.iflytek.domain.User-->
   <select id="getAllUser"    resultType="User">
    select * from user_info
   </select>
   
   <!-- parameterType:参数类型 int 同Integer #{id}:占位符-->
   <select id=" getOneById" parameterType="int" resultType="User">
     select * from user_info where id=#{id}
   </select>
   
    <insert id="insertNewUser" parameterType="User">
     insert into user_info(username,password) value (#{username},#{password})
    </insert>
    
    <update id="updateUser" parameterType="User">
   update  user_info set username=#{username} , password=#{password} where id=#{id}
    </update>
    
    <delete id="deleteUserById" parameterType="Integer">
    delete from user_info where id=#{id}
    </delete>
    
 </mapper>

6.在主配置文件中包含mapper文件

在这里插入图片描述

使用文件路径的方式 <mapper resource="文件路径/子路径/XXX.xml"/>
也可以 <mapper class=""/>

7.编写一个测试类

package com.iflytek.test;

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

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.io.ResolverUtil.Test;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.iflytek.domain.User;

public class MybatisTest {

	/*从src路径开始查找*/
	private static final String PATH = "mybatis-config.xml";
	/* 创建SqlSession对象*/
	private SqlSession session = null;

	/* 初始化方法*/
	public void init() throws IOException {
		//字符流
		Reader reader = Resources.getResourceAsReader(PATH);
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
		session = sessionFactory.openSession();
	}
	public void updateUser(User user) {
		int id=session.update("updateUser", user);
		session.commit();
		System.out.println(id);	
	}
	
	public int insertNewUser(User user) {
		int id= session.insert("insertNewUser", user);
		session.commit();
		 System.out.println(id); 
		return id;	
		
		/* 
		 * return session.insert("insertNewUser", user); 
		 * 不能使用上述返回方法  因为insert()方法需要提交
		 * 否则只存在缓存区内,关闭程序会导致发生回滚
		 * */
	}
	
	public int deleteUserById(int id) {
		int idx = session.delete("deleteUserById", id);
		session.commit();
		System.out.println(idx);
		return idx;	
	}
	
	public List<User> getAllUser(){
		/* session.selectList()参数与mapper中id对应 */
		List<User> list=session.selectList("getAllUser");
		return list;		
	}
	
	public User getOneById(int id) {
		return session.selectOne("getOneById", id);
	}
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		 MybatisTest test=new MybatisTest();
		 test.init();		
		/* 查询用户列表
		 * List<User> list=test.getAllUser(); 
		 * System.out.println(list); 
		 * */
			
		/*插入一条数据
		 * User user=new User(); user.setUsername("王娜2"); user.setPassword("123"); int
		 * i=test.insertNewUser(user); if(i==1) { System.out.println("插入数据成功!!"); }
		 */
		
		/*根据id删除某条数据
		 *  test.deleteUserById(3); 
		 *  
		 *   */
		 	
		/*更新一条数据
		 * User user=new User(); user.setUsername("zhang"); user.setPassword("123");
		 * user.setId(2);
		 * 
		 * test.updateUser(user);
		 */
		 
		 		
		  List<User> list=test.getAllUser(); 
		  System.out.println(list);
 
	}

}

绑定接口和绑定持久化类的区别

1.绑定接口:id与方法名相同
2.绑定类:id可以随便取

附1:数据库和表设计

user_info表设计:
在这里插入图片描述

附2:db.properties文件示例

#MySql infomation
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/train?useUnicode=true&characterEncoding=UTF-8
username=root
password=

换成自己的数据库登录信息等!!

我的联系方式:QQ:1207787189
如您有问题可与我联系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值