mybaits----参数的处理----笔记
目录结构
mybaits的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">
<configuration>
<properties resource="db.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
</dataSource>
</environment>
</environments>
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
</databaseIdProvider>
<mappers>
<mapper resource="sqlMapper.xml"/>
</mappers>
</configuration>
sqlMapper的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="top.demo.inter.TestSqlInterface">
<!-- #{} 和 ${} 占位参数 #预编译形式,$直接拼sql -->
<!--
1.当只有一个参数时 且该参数类型 不是Collection的实现类 如list set等
,那么框架不会封装参数成map 否则参数最终都封装成map
2.当接口的参数没有使用param注解,那么 映射xml取参默认的key为param1...paramN N代表该参数在接口中的位置,
如果使用了注解用注解表名的参数名即可
3.可以直接使用bean当作参数,xml取参用该bean的属性即可
4.当没有bean 为了方便 接口的参数可以直接使用Map key为占位参数的名字 value为参数值
5.关于返回主键 使用useGeneratedKeys="true" keyProperty="id" ,keyProperty指定了获取主键保存在哪个属性里
-->
<select id="getOne" resultType="top.demo.bean.Customer" databaseId="mysql">
select id,name,address as home,phone from customers where id = #{id}
</select>
<update id="updateInfo" databaseId="mysql">
update customers set name=#{param2},address=#{home}
where id=#{id}
</update>
<delete id="deleteOne" databaseId="mysql" >
delete from customers where id=#{id}
</delete>
<insert id="insert" useGeneratedKeys="true" keyProperty="id" databaseId="mysql">
insert into customers (name,address) value(#{name},#{home})
</insert>
<select id="getSize" resultType="int" databaseId="mysql">
select count(id) from customers
</select>
</mapper>
数据库配置文件
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/testpro
mysql.username=root
Dao接口
package top.demo.inter;
import java.util.Collection;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import top.demo.bean.Customer;
public interface TestSqlInterface {
public Customer getOne(int id);
public int updateInfo(@Param("id") int id,String name,@Param("home")String home);
public boolean deleteOne(Map<String, Object>map);
public boolean insert(Customer customer);
public int getSize();
}
测试入口
package top.demo.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.mysql.jdbc.DatabaseMetaData;
import top.demo.bean.Customer;
import top.demo.inter.TestSqlInterface;
public class Test {
public static void main(String argv[]) throws IOException
{
String resource = "mybatisconfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
System.out.println(sqlSessionFactory);
//构造参数传入true为开启自动提交 如果为false需要在之后手动commit
SqlSession session=sqlSessionFactory.openSession(true);
TestSqlInterface testDao = (TestSqlInterface) session.getMapper(TestSqlInterface.class);
System.out.println(testDao.getOne(1));
//testDao.updateInfo(1, "你好2222", "中国");
//System.out.println(testDao.getOne(1));
System.out.println(testDao.getSize());
/*
* 接口参数直接用bean xml里用bean的属性
* */
/*Customer customer=new Customer("这是测试的111","火星");
boolean res=testDao.insert(customer);
System.out.println(res);
System.out.println(customer.getId());
System.out.println(testDao.getOne(customer.getId()));*/
/*
* 测试map作为接口的参数 且 映射xml里直接用map的key获取value
* */
/*Map<String, Object> map=new HashMap<>();
map.put("id", 10);
System.out.println(testDao.deleteOne(map));*/
session.close();
}
}
用到的bean
package top.demo.bean;
public class Customer {
private int id;
private String name;
private String home; //address
private String phone;
public int getId() {
return id;
}
@Override
public String toString() {
return "Customer [id=" + id + ", name=" + name + ", home=" + home + ", phone=" + phone + "]";
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHome() {
return home;
}
public void setHome(String home) {
this.home = home;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Customer() {
super();
}
public Customer(String name, String home) {
super();
this.name = name;
this.home = home;
}
}