1.在src下创建一个myBatis.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> <!-- default:指默认使用id为defaultr的 environment配置 一个environments下可以有多个environment--> <environments default="default"> <environment id="default"> <!-- 使用原生jdbc事务 --> <transactionManager type="JDBC"></transactionManager> <!-- 使用数据库连接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/ssm"/> <property name="username" value="root"/> <property name="password" value="admin"/> </dataSource> </environment> </environments> <!-- 读取mapper --> <mappers> <mapper resource="com/strong/mapper/FlowerMapper.xml"/> </mappers> </configuration>
2.新建一个包com.strong.mapper,在包下创建FlowerMapper.xml文件(类名.mapper.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"> <!-- namespace:命名,可以随意取 --> <mapper namespace="com.strong.mapper"> <!-- resultType:实体类,要写类命名 id:命名 --> <select resultType="com.strong.pojo.Flower" id="selectAll"> select * from flower </select> </mapper>
3.测试MyBatis
public class Test { public static void main(String[] args) throws IOException { //读取XML文件 InputStream is=Resources.getResourceAsStream("myBatis.xml"); //创建SqlSessionFactory工厂 SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is); //生产一个SqlSession对象 SqlSession session=factory.openSession(); //读取数据库 List<Flower> list=session.selectList("com.strong.mapper.selectAll"); for(Flower flower:list) { System.out.println(flower); } } }
三种常查询方式:
1.
返回一个List对象,适用于查询需要遍历的结果
List<Flower> list=session.selectList("com.strong.mapper.selectAll"); for(Flower flower:list) { System.out.println(flower); }
<select resultType="com.strong.pojo.Flower" id="selectAll"> select * from flower </select>
2.
返回一个Object对象,适用于查询一条数据
int count=session.selectOne("com.strong.mapper.selectOne"); System.out.println(count);
<select resultType="int" id="selectOne"> select count(*) from flower </select>
3.
返回一个map,适用于需要对查询结果再次筛选(通讯录)
Map<Object,Object> map=session.selectMap("com.strong.mapper.selectMap", "name");//name为map的key
System.out.println(map);
<select resultType="com.strong.pojo.Flower" id="selectMap"> select * from flower </select>
MyBatis日志输出方法
1.在myBatis配置文件中加入<stttings>
<settings> <setting name="logImpl" value="LOG4J"/> </settings>
2.在log4j.propertie 中设置输出级别
log4j.rootCategory=ERROR, CONSOLE,LOGFILE
log4j.logger.com.strong.mapper=DEBUG //包级别,类级别,方法级别
parameterType使用:
可以使用#{ }和¥{ }获取参数:
#{} 和${} 的区别:
#{} 获取参数的内容支持索引获取,param1 获取指定位置参数,
并且SQL 使用?占位符
${} 字符串拼接不使用?,默认找${内容}内容的get/set 方法,如
果写数字,就是一个数字
<!-- 相当于:Preparing: select * from flower where id=? -->
<select resultType="com.strong.pojo.Flower" id="selectForId" parameterType="int"> select * from flower where id=#{0} </select>
<!-- 相当于:Preparing: select * from flower where id=0 -->
<select resultType="com.strong.pojo.Flower" id="selectForId" parameterType="int"> select * from flower where id=${0} </select>
//selectXXX方法第二个参数为sql查询参数
Flower flower=session.selectOne("com.strong.mapper.selectForId",1);
<select resultType="com.strong.pojo.Flower" id="selectForId" parameterType="com.strong.pojo.Flower"> select * from flower where id=${id} <!-- 传入类的查询方法,大括号内写类的成员名称,myBatis低层调用get方法--> </select>
Flower flower=new Flower(); flower.setId(2); Flower flower2=session.selectOne("com.strong.mapper.selectForId",flower); System.out.println(flower2);
使用map作为参数的使用方法:
<select resultType="com.strong.pojo.Flower" id="selectMap" parameterType="map"> select * from flower where id=#{id} or name=#{name} </select>
Map<String,Object> map=new HashMap<String,Object>(); map.put("name","菊花");map.put("id", 2); List<Flower> list=session.selectList("com.strong.mapper.selectMap", map); for(Flower f:list){ System.out.println(f); }
实现分页
//每页显示几个 int pageSize=3; //第几页 int pageNumber=3; //计算好结果再传入 int pageStart=pageSize*(pageNumber-1); Map<String,Integer> map=new HashMap<String,Integer>(); map.put("pageSize", pageSize); map.put("pageStart", pageStart); List<Flower> list=session.selectList("com.strong.mapper.page",map); for(Flower f:list) { System.out.println(f); }
<select resultType="com.strong.pojo.Flower" id="page" parameterType="map"> select * from flower limit #{pageStart},#{pageSize} </select>
别名:
在myBatis中配置typeAliases属性
<typeAliases> <typeAlias type="com.strong.pojo.Flower" alias="flower"/> <package name="com.strong.pojo"/> </typeAliases>
插入数据方法:
<select id="insert" parameterType="Flower"> insert into flower values(default,#{name},#{price},#{production}) </select>
Flower f=new Flower(1,"newName",3.14,"test");
session.insert("com.strong.mapper.insert",f);
session.commit();
事务回滚:.如果在一个事务中某个SQL 执行事务,希望回归到事务的原点,保证数据库数据的完整性.
Flower f=new Flower(1,"newName",3.14,"Test"); try { session.insert("com.strong.mapper.insert",f); }catch(Exception e) { System.out.println("插入失败"); session.rollback();//回滚 } session.commit();